【问题标题】:How to create duplicate rows using Pivot Table Python如何使用数据透视表 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'])

【问题讨论】:

    标签: python python-3.x python-2.7 pandas pivot-table


    【解决方案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
    

    【讨论】:

    • 学习了新功能:-)。
    猜你喜欢
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 2021-10-26
    • 2023-03-16
    相关资源
    最近更新 更多