【问题标题】:MultiIndex Pivot Table with Subtotals in PandasPandas 中带有小计的 MultiIndex 数据透视表
【发布时间】:2018-09-27 15:15:38
【问题描述】:

你好,

我有以下数据:

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 - 但这并不能满足我的需求。

有人可以帮忙吗? 谢谢

【问题讨论】:

    标签: pandas pivot-table subtotal


    【解决方案1】:

    这将需要 pd.concat 和 sum 通知我将 para 传递给 level ,因为您想要索引日期和 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
    

    【讨论】:

    • 温先生您好,感谢您的回答。在我的原始数据集中,由于法律问题,我没有在这里发布小计,但它显示在 item_type 的组上方,我希望显示在组的底部。你也知道解决这个问题吗?
    • @GeorgeC.Serban 您可以使用sort_index,这也是我的回答对您有用,要考虑接受吗?左边的复选标记
    猜你喜欢
    • 2017-05-13
    • 2021-11-03
    • 2013-03-12
    • 2018-05-31
    • 1970-01-01
    • 2020-10-17
    • 2018-06-27
    • 1970-01-01
    • 2019-04-07
    相关资源
    最近更新 更多