【问题标题】:Dropping the sum column in pandas pivot table, but keeping the row删除熊猫数据透视表中的总和列,但保留该行
【发布时间】:2021-05-12 05:32:53
【问题描述】:

所以我有一个 pandas 数据透视表,我想将列的总和保留在底部(所以总和行)。但是,当我说 margins=True 并且我不想要那个时,还会添加一列。

我已尝试删除该列,但从多索引表中删除一列只会导致错误。如果我做 drop('All', axis=1),它会显示 KeyError: 'All',如果我做 axis=0,它会去掉底部的总数(我想要的)。

artist_table = pd.pivot_table(total_df,
                              values=['Records Created', 
                                      'Tickets Sold'],
                              index=['artist name',
                                     'artist id'],
                              columns=['date'],
                              aggfunc=np.sum,
                              fill_value=0,
                              margins=True)

我想要的是:

                                 Leads Created       Revenue     
 date                             6/1                 6/2                                        
    artist_id    artist_name      
    XXX           YYY            x                   y            
    AAA           BBB            a                   b            
    All                         (x+a)             (y+b)    

我现在拥有的是:

                                Leads Created       Revenue     
date                              6/1                 6/2           All                                
artist_id    artist_name      
    XXX           YYY              x                   y          (x+y)
    AAA           BBB              a                   b          (a+b)
    All                           (x+a)             (y+b)                    

我希望右边的 All(行的总和)消失。有人可以帮忙吗?提前谢谢!

【问题讨论】:

  • 获得artist_table中的数据后,可以使用artist_table = artist_table.drop("All", axis=1)吗?
  • pivot_table 命令的右侧添加.drop('All', 1)
  • 您好,感谢您的回复……不幸的是,这不起作用。我没有将整个表格都放在帖子中,但我添加了它,以便您更好地了解我正在使用的内容。
  • 您有没有想出解决方案?删除 All 列让我发疯,而且我也不需要像您那样的 All 行。但是,如果我设置 margins=False,它出于某种原因搞砸了我的 dropna=True,因为我的结果表显示了 NAN。我设置了 margins=True 并且 NAN 消失了,但是我得到了一个我不想要的 All 列。很奇怪。

标签: python pandas


【解决方案1】:

我最终使用此处建议的替代选项将数据透视表转换为数据框:

transform pandas pivot table to regular dataframe

...然后从该新数据框中删除“全部”列。

【讨论】:

    【解决方案2】:

    您可以通过以下方式交换标题级别

    artist_table=artist_table.swaplevel(0,1,axis=1).sort_index(axis=1)
    

    然后删除“全部”列

    artist_table.drop("All", axis=1)
    

    然后你可以换回关卡

    artist_table=artist_table.swaplevel(0,1,axis=1).sort_index(axis=1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-15
      • 2014-11-03
      • 1970-01-01
      • 2017-11-21
      • 2021-02-28
      • 2023-01-11
      • 1970-01-01
      相关资源
      最近更新 更多