如何使用另一列的值从一列创建多列?
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 中选择特定列?