如何使用另一列的值从一列创建多列?
How to create multiple columns from one column using values from another column?
我有一个包含近 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 添加数据,但我在这种方法中也失败了。
谁能给我一些建议?也许我的方法完全错误?
你想要的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')
我有一个包含近 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 添加数据,但我在这种方法中也失败了。
谁能给我一些建议?也许我的方法完全错误?
你想要的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')