【问题标题】:Calculating subtotals in pandas pivot_table with MultiIndex使用 MultiIndex 计算 pandas pivot_table 中的小计
【发布时间】:2016-10-11 05:10:16
【问题描述】:

我在数据框中有以下原始数据:

   BROKER    VENUE  QUANTITY
0  BrokerA  Venue_1       300
1  BrokerA  Venue_2       400
2  BrokerA  Venue_2      1400
3  BrokerA  Venue_3       800
4  BrokerB  Venue_2       500
5  BrokerB  Venue_3      1100
6  BrokerC  Venue_1      1000
7  BrokerC  Venue_1      1200
8  BrokerC  Venue_2     17000

我想对数据做一些汇总,看看每个经纪人向每个场地发送了多少,所以我创建了一个 pivot_table:

pt = df.pivot_table(index=['BROKER', 'VENUE'], values=['QUANTITY'], aggfunc=np.sum)

结果如预期:

                 QUANTITY
BROKER  VENUE            
BrokerA Venue_1     300.0
        Venue_2    1800.0
        Venue_3     800.0
BrokerB Venue_2     500.0
        Venue_3    1100.0
BrokerC Venue_1    2200.0
        Venue_2   17000.0

我还想总共向每个经纪人发送了多少。并将其显示在同一张表中。我可以通过键入 df.groupby('BROKER').sum() 来获取该信息,但是如何将其作为名为 BROKER_TOTAL 的列添加到我的数据透视表中?

注意:这个问题很相似,但似乎是在旧版本上,我最好的猜测是让它适应我的情况没有奏效:Pandas Pivot tables row subtotals

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以为df1 创建MultiIndex.from_arrays,将concat 创建为pt 和最后一个sort_index

    df1 = df.groupby('BROKER').sum()
    df1.index = pd.MultiIndex.from_arrays([df1.index + '_total', len(df1.index) * ['']])
    print (df1)
                    QUANTITY
    BrokerA_total       2900
    BrokerB_total       1600
    BrokerC_total      19200
    
    print (pd.concat([pt, df1]).sort_index())
                           QUANTITY
    BROKER        VENUE            
    BrokerA       Venue_1       300
                  Venue_2      1800
                  Venue_3       800
    BrokerA_total              2900
    BrokerB       Venue_2       500
                  Venue_3      1100
    BrokerB_total              1600
    BrokerC       Venue_1      2200
                  Venue_2     17000
    BrokerC_total             19200
    

    【讨论】:

    • 我可以使用df.groupby('BROKER').max() 获得QUANTITY 的最大值。但是如何打印VENUE
    • @Akira 你能查一下df.loc[df.groupby('BROKER')['QUANTITY'].idxmax()]吗?
    • 如果我有一个包含两列的 groupby 怎么办? @jezrael
    猜你喜欢
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    • 2018-09-27
    • 2020-09-30
    • 1970-01-01
    相关资源
    最近更新 更多