【问题标题】:Pandas pivot_table function showing incorrect margin totalPandas pivot_table 函数显示不正确的保证金总额
【发布时间】:2020-11-24 23:54:58
【问题描述】:

我有一个基础数据集 (pd.DataFrame),我试图在其上应用 pivot_table 函数。当我只使用一列作为“值”时,我得到了正确的边距总数。但是,当我使用包含两列的列表作为“值”时,边距总计变得不正确。我正在使用以下代码[相应的输出显示在旁边]:

代码:

DetailedTable_GBP.pivot_table(index=['Level','Index','Currency'], values=['Daily','MTD'], aggfunc=sum, margins=True)

输出:

                              Daily     MTD
 Level   Index     Currency  
-----------------------------------------------
 Foo     Apples    GBP        18,385   -3,962
 Bar     Oranges   GBP        4,444    -79,282
 All                          22,830   -83,369 

代码:

DetailedTable_GBP.pivot_table(index=['Level','Index','Currency'], values=['MTD'], aggfunc=sum, margins=True)

输出:

                              MTD
 Level   Index     Currency   
------------------------------------
 Foo     Apples    GBP       -3,962
 Bar     Oranges   GBP      -79,282
 All                        -83,244 

如何使用多个“值”实现正确的边距总计?

编辑 1. 我发现我得到了不同的总数,因为我的基础数据的“每日”列中有一个 NaN。因此,问题得到了回答。很抱歉发布这个问题。我应该先彻底检查基础数据。

【问题讨论】:

    标签: python pandas pivot-table


    【解决方案1】:

    因为我的基础数据集中有 NaN 值(特别是在“每日”列中),所以将 fillna(0) 应用于我的基础数据集解决了总边距不正确的问题。

    正确代码:

    DetailedTable_GBP.fillna(0).pivot_table(index=['Level','Index','Currency'], values=['Daily','MTD'], aggfunc=sum, margins=True)
    

    【讨论】:

      【解决方案2】:
      DetailedTable_GBP.pivot_table(index=['Level', 'Index', 'Currency'], 
                                   values=['Daily', 'MTD'], 
                                  aggfunc={'Daily': sum,'MTD': sum}, 
                                  margins=True)
      

      【讨论】:

      • 感谢您的建议。但是,我使用 dict-type aggfunc 得到的结果与我的问题中提到的结果相同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-18
      • 1970-01-01
      • 2011-07-08
      • 2019-03-01
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多