如何使用数据透视表 Python 创建重复行
Posted
技术标签:
【中文标题】如何使用数据透视表 Python 创建重复行【英文标题】:How to create duplicate rows using Pivot Table Python 【发布时间】:2019-04-19 19:26:33 【问题描述】:我想在 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
我希望输出为
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
我正在尝试使用 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'])
【问题讨论】:
【参考方案1】:将SKU
和Ids
设置为索引,然后将stack
设置为reset_index
和rename
:
df = df.set_index(['SKU','Ids'])\
.stack().reset_index()\
.rename(columns='level_2':'wk',0:'value')
或者:
df = df.set_index(['SKU','Ids'])\
.stack().reset_index(name='value')\
.rename(columns='level_2':'wk')
或者根据 cmets 中的W-B
建议,使用melt
和sort_values
的另一种方法:
df = df.melt(id_vars=['SKU','Ids'])\
.rename(columns='variable':'wk')\
.sort_values(['SKU','Ids'])
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
【讨论】:
如果你可以使用melt
而不是stack
来提高性能
@W-B 我首先检查了melt
,但它没有保留订单。但也是一个不错的选择。您可以将其包含在答案中,否则我将作为参考。
@SandeepKadapa 链与 sort_value【参考方案2】:
这就是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
【讨论】:
学习了新功能:-)。以上是关于如何使用数据透视表 Python 创建重复行的主要内容,如果未能解决你的问题,请参考以下文章