【问题标题】:Performing Functions on Multi-Index Column Dataframe based on Column Values基于列值对多索引列数据框执行功能
【发布时间】:2019-06-24 19:05:14
【问题描述】:

我有一个如下所示的数据框:

                   |    PACKAGES SHIPPED     |    PACKAGES TRANSFERRED   |
Product & Quantity | Apple-5 pk | Apple-5 pk | Apple-5 pk  |  Apple-5pk  |
Store Branch I.D.  |  34234324  |  34235555  |  34234324   |  34235555   |
----------------------------------------------------------------------------
   Period Week     
   5/14 - 5/20     |     5      |     10     |     20      |     7       |
   5/21 - 5/27     |     40     |      X     |      1      |     Y       |

此数据框具有“已发货包裹”的多列标题,其中有许多商店分支都将包含“已发货包裹”。

如果我想为特定的“产品和数量”值和特定的“商店和分行 ID”汇总“已发货包裹”和“已转移包裹”,那么对于每个周期周,最有效的方法是什么?做这个?

理想的结果数据框是:

                   |Sum Shipped & Transferred|Sum Shipped & Transferred  |                     
Product & Quantity |       Apple-5 pk        |         Apple-10 pk       |
Store Branch I.D.  |  34234324  |  34235555  |  34234324   |  34235555   |
----------------------------------------------------------------------------
   Period Week     
   5/14 - 5/20     |     25     |     17     |     40      |     234     |
   5/21 - 5/27     |     41     |     X+Y    |     34      |      25     |

【问题讨论】:

    标签: python pandas dataframe multi-index


    【解决方案1】:

    考虑将其表示为数据框而不是图片可能会有所帮助。这是考虑您的问题的简单方法。当然,如果您确实拥有使用图片所示的多列索引存储的数据,那么这将无济于事。

    In [33]: df = pd.DataFrame({'Period Week':['5/14 - 5/20','5/21 - 5/27','5/14 - 5/20','5/21 - 5/27'],'Transaction':['Shi
        ...: pped','Shipped','Transfered','Transfered'],'Package SKU':['Apples-5k','Apples-10k','Apples-5k','Apples-10k'],'
        ...: Quantity':[5,10,20,7]})
    
    In [34]: df
    Out[34]:
       Period Week Transaction Package SKU  Quantity
    0  5/14 - 5/20     Shipped   Apples-5k         5
    1  5/21 - 5/27     Shipped  Apples-10k        10
    2  5/14 - 5/20  Transfered   Apples-5k        20
    3  5/21 - 5/27  Transfered  Apples-10k         7
    

    然后将索引设置为多列:

    df.set_index(['Period Week','Transaction','Package SKU'])
    

    最后,groupby 和 calc

    In [35]: df.groupby(['Period Week','Package SKU'])['Quantity'].count()
    Out[35]:
    Period Week  Package SKU
    5/14 - 5/20  Apples-5k      2
    5/21 - 5/27  Apples-10k     2
    Name: Quantity, dtype: int64
    

    【讨论】:

    • 非常感谢您的回复!实际上,我确实将数据存储在如图所示的多索引列中。您是否对如何根据原始数据框执行求和有一些建议/见解?
    • 那么你是说你已经有一个多索引数据框了吗?如果您提供代码来创建您正在处理的数据框,也许会有所帮助。如果它已经有一个分层索引,那么切片应该非常简单。
    猜你喜欢
    • 1970-01-01
    • 2019-11-07
    • 2020-09-07
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多