Sai*_*nth 5 python pivot-table python-2.7 python-3.x pandas
我想在python中为数据帧创建重复的行.数据框看起来像这样
SKU Ids wk_1 wk_2 wk_3 wk_4 wk_5 wk_6
10 20 1 2 3 4 5 6
30 40 6 5 4 3 2 1
Run Code Online (Sandbox Code Playgroud)
我希望输出为
SKU Ids wk value
10 20 wk_1 1
10 20 wk_2 2
10 20 wk_3 3
10 20 wk_4 4
10 20 wk_5 5
10 20 wk_6 6
30 40 wk_1 6
30 40 wk_2 5
30 40 wk_3 4
30 40 wk_4 3
30 40 wk_5 2
30 40 wk_6 1
Run Code Online (Sandbox Code Playgroud)
我试图使用pivot_table,但它显示我错误
hqp = hq.pivot_table(columns=['sku', 'ids','value'],
index= ['sku', 'ids'],
values = ['wk_1', 'wk_2', 'wk_3', 'wk_4','wk_5', 'wk_6'])
Run Code Online (Sandbox Code Playgroud)
这是如何wide_to_long构建的
pd.wide_to_long(df,['wk'],i=['SKU','Ids'],j='value',sep='_').reset_index()
Out[28]:
SKU Ids value wk
0 10 20 1 1
1 10 20 2 2
2 10 20 3 3
3 10 20 4 4
4 10 20 5 5
5 10 20 6 6
6 30 40 1 6
7 30 40 2 5
8 30 40 3 4
9 30 40 4 3
10 30 40 5 2
11 30 40 6 1
Run Code Online (Sandbox Code Playgroud)
将SKU和设置Ids为索引,stack然后reset_index设置 和rename:
df = df.set_index(['SKU','Ids'])\
.stack().reset_index()\
.rename(columns={'level_2':'wk',0:'value'})
Run Code Online (Sandbox Code Playgroud)
或者:
df = df.set_index(['SKU','Ids'])\
.stack().reset_index(name='value')\
.rename(columns={'level_2':'wk'})
Run Code Online (Sandbox Code Playgroud)
或者根据评论中的建议,使用andW-B的另一种方法:meltsort_values
df = df.melt(id_vars=['SKU','Ids'])\
.rename(columns={'variable':'wk'})\
.sort_values(['SKU','Ids'])
Run Code Online (Sandbox Code Playgroud)
print(df)
SKU Ids wk value
0 10 20 wk_1 1
1 10 20 wk_2 2
2 10 20 wk_3 3
3 10 20 wk_4 4
4 10 20 wk_5 5
5 10 20 wk_6 6
6 30 40 wk_1 6
7 30 40 wk_2 5
8 30 40 wk_3 4
9 30 40 wk_4 3
10 30 40 wk_5 2
11 30 40 wk_6 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53 次 |
| 最近记录: |