如何使用数据透视表 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】:

SKUIds 设置为索引,然后将stack 设置为reset_indexrename

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 建议,使用meltsort_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 创建重复行的主要内容,如果未能解决你的问题,请参考以下文章

Excle数据透视表如何重复显示行字段的项目标签

Excle数据透视如何在数据透视表字段列表中显示更多的字段

如何在多个日期行上透视表[重复]

Excle数据透视二维数据如何创建数据透视表

Excle数据透视如何创建多条件汇总的数据透视表

Excel 请问资料透视表如何去掉汇总行