在Pandas中具有小计的MultiIndex数据透视表

时间:2018-04-17 15:12:14

标签: pandas pivot-table subtotal

Helllo,

我有以下数据:

date    item_type    item_name    gold_exit
2018-01-25    type1    item1    1
2018-01-25    type2    item2    2
2018-01-25    type3    item3    3
2018-01-25    type1    item4    4
2018-01-25    type2    item5    5
2018-01-26    type3    item6    6
2018-01-26    type1    item7    7
2018-01-26    type2    item8    8
2018-01-26    type3    item9    9
2018-01-26    type1    item10    10
2018-01-27    type2    item11    11
2018-01-27    type3    item12    12
2018-01-27    type1    item13    13
2018-01-27    type2    item14    14
2018-01-27    type3    item15    15
2018-01-28    type1    item16    16
2018-01-28    type2    item17    17
2018-01-28    type3    item18    18
2018-01-28    type1    item19    19
2018-01-28    type2    item20    20
2018-01-29    type3    item21    21
2018-01-29    type1    item22    22
2018-01-29    type2    item23    23
2018-01-29    type3    item24    24
2018-01-29    type1    item25    25
2018-01-30    type2    item26    26
2018-01-30    type3    item27    27
2018-01-30    type1    item28    28
2018-01-30    type2    item29    29
2018-01-30    type3    item30    30

我已经设法使用它自己转动:

import pandas as pd
import numpy as np

df = pd.read_csv(r"C:\Users\user\Desktop\sql_values.csv")

table = pd.pivot_table(df,index=["date","item_type","item_name"],
                   values=["gold_exit"],
                   aggfunc=[np.sum])
print(table)

这就是我得到的:

date    item_type   item_name   Sum - gold_exit
2018-01-25  type1   item1   1
                    item4   4
            type2   item2   2
                    item5   5
            type3   item3   3
2018-01-26  type1   item10  10
                    item7   7
            type2   item8   8
            type3   item6   6
                    item9   9
2018-01-27  type1   item13  13
            type2   item11  11
                    item14  14
            type3   item12  12
                    item15  15
2018-01-28  type1   item16  16
                    item19  19
            type2   item17  17
                    item20  20
            type3   item18  18
 2018-01-29 type1   item22  22
                    item25  25
            type2   item23  23
            type3   item21  21
                    item24  24
2018-01-30  type1   item28  28
            type2   item26  26
                    item29  29
            type3   item27  27
                    item30  30

通过添加小计,我到底应该做什么才能到达这里?

date    item_type   item_name   Sum - gold_exit
2018-01-25  type1       
                        item1   1
                        item4   4
            type1 Result        5
            type2       
                        item2   2
                        item5   5
            type2 Result        7
            type3       
                       item3    3
            type3 Result        3...

我先看过这个问题 - Pivot table subtotals in Pandas - 但这并不符合我的需要。

有人可以帮忙吗? 感谢

1 个答案:

答案 0 :(得分:0)

这需要pd.concatsum通知我将para传递给级别,因为您希望获得索引日期和item_type的小计

s=pd.concat([table,table.sum(level=[0,1]).assign(iten_name='result').set_index('iten_name',append=True)]).sort_index(level=[0,1,2])
s
Out[709]: 
                                     sum
                               gold_exit
date       item_type item_name          
2018-01-25 type1     item1             1
                     item4             4
                     result            5
           type2     item2             2
                     item5             5
                     result            7
           type3     item3             3
                     result            3
2018-01-26 type1     item10           10
                     item7             7
                     result           17
           type2     item8             8
                     result            8
           type3     item6             6
                     item9             9
                     result           15
2018-01-27 type1     item13           13
                     result           13
           type2     item11           11
                     item14           14
                     result           25
           type3     item12           12
                     item15           15
                     result           27
2018-01-28 type1     item16           16
                     item19           19
                     result           35
           type2     item17           17
                     item20           20
                     result           37
           type3     item18           18
                     result           18
2018-01-29 type1     item22           22
                     item25           25
                     result           47
           type2     item23           23
                     result           23
           type3     item21           21
                     item24           24
                     result           45
2018-01-30 type1     item28           28
                     result           28
           type2     item26           26
                     item29           29
                     result           55
           type3     item27           27
                     item30           30
                     result           57