如何使用另一列的值从一列创建多列?

Posted

技术标签:

【中文标题】如何使用另一列的值从一列创建多列?【英文标题】:How to create multiple columns from one column using values from another column? 【发布时间】:2022-01-05 01:34:32 【问题描述】:

我有一个包含近 100 家商店的时间序列数据集。时间段是几年(但并非所有商店都适用 - 有一些旧的和新的)。

Store_num date Sales
23 01Jan2012 125
23 01Feb2012 12
23 01Mar2012 388
... ... ...
57 01Jan2013 456
57 01Feb2013 555
57 01Mar2013 545
57 01Apr2013 657
... ... ...

为了预测未来的销售额(第一种方法是使用 statsmodels),我决定将 df 更改为:

date 23_sales 57_sales
01Jan2012 125 NaN
01Feb2012 12 NaN
01Mar2012 388 NaN
... ... ...
01Jan2013 ... 456
01Feb2013 ... 555
01Mar2013 ... 545
01Apr2013 ... 657
... ... ...

我可以一一添加这些列,但我无法创建某种循环。 我的做法是一一做的:

store_23 = df[df['Store_num'] == 23].copy()
store_23.set_index(store_23['date'], inplace = True)
store_23.drop(['Store', 'date'], axis = 1, inplace = True)
store_23.columns = ['23_sales']

我也在考虑创建一个销售名称列表(列名):

df_list = df['Store_num'].unique()
y_list = [str(num) + "_y" for num in df_list]

而不是创建新的 df 并使用 groupby 添加数据,但我在这种方法中也失败了。

谁能给我一些建议?也许我的方法完全错误?

【问题讨论】:

使用 pandas 将日期列格式化为 datetime 格式正确。 @Tom 另外,您要查找的内容称为unstack 当我制作这些表格时,我正在查看原始 df,这就是我在格式化之前写日期的原因......我的错误。方法 df.unstack 看起来类似于 .pivot 也许它可以通过两种方式完成,但 .pivot 对我有用!感谢您的建议! 【参考方案1】:

iiuc 你想要 df.pivot:

df = pd.DataFrame(
    
        'store_num':[0,0,0,1,1,1,2,2,2],
        'date':[1,2,3]*3,
        'sales':np.random.randint(0,10,9),
    
)

df.pivot(index='date', columns='store_num')

【讨论】:

它就像一个魅力!我一直在以多种不同的方式寻找解决方案,但我还没有找到 .pivot。感谢您的帮助!

以上是关于如何使用另一列的值从一列创建多列?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据另一列的值从 Spark DataFrame 中选择特定列?

Liquibase:将值从一列复制到具有数组数据类型的另一列

如果满足条件,熊猫将值从一列复制到另一列

如何将值从一列映射到另一列数据框? [复制]

在同一个表中将值从一列复制到另一列

如何根据另一列的值获取单行值?