【问题标题】:Use Groupby and Sum to reduce a dataframe使用 Groupby 和 Sum 减少数据框
【发布时间】:2021-12-19 21:08:58
【问题描述】:

我有一个数据框,其中一列中有一些重复值。我想按该列分组并对其他列求和。数据框如下所示:

编辑:这里是创建数据框的代码。请注意名为“Able”的列,它是索引。

df=pd.DataFrame({'Able': ['Blue', 'Green', 'Red', 'Orange'], 'Baker':[ 'New York', 'New Jersey', 'New York', 'New Jersey'], 'Charlie':[3,4,'',7], 'Delta':['',5,6,''],'Echo':[100,200,300,400]}).set_index('Able')

结果应按“贝克”分组,并对其他三列求和。我尝试过各种风格的 groupby 和 pivot_table。他们返回正确的两行(纽约和新泽西),但他们只返回“贝克”和最右边一列的总和“回声”。应忽略作为源数据帧索引的最左侧列“Able”。我的输出应该如下所示(感谢@corralien 发现错误进行编辑):

Baker   Charlie Delta   Echo
New Jersey  11  5   600
New York    3   6   400

如何返回所有列,最好不要在代码中按名称列出它们?

【问题讨论】:

  • 如果您提供代码来构建示例数据框以进行快速复制/粘贴,这将非常有帮助。
  • 你能检查一下你的输出吗? Delta 值可能被交换了?

标签: python pandas dataframe group-by pivot-table


【解决方案1】:

用 0 和 agg sum 替换空格。这将取决于什么 dype,最后三列是。我为您复制了 df,如果我的 dtypes 错误,请随时编辑并编辑问题。论坛将为您提供指导。

数据框

   df=pd.DataFrame({'Baker':[ 'New York', 'New Jersey', 'New York', 'New Jersey'], 'Charlie':[3,4,'',7], 'Delta':['',5,6,''],'Echo':[100,200,300,400]})

代码

 df.replace('',0).groupby('Baker').agg('sum')

输出

            Charlie  Delta  Echo
Baker                           
New Jersey       11      5   600
New York          3      6   400

【讨论】:

    【解决方案2】:

    使用pivot_table:

    >>> df.pivot_table(index='Baker', values=['Charlie', 'Delta', 'Echo'], 
                       aggfunc='sum').reset_index()
    
            Baker  Charlie  Delta  Echo
    0  New Jersey     11.0    5.0   600
    1    New York      3.0    6.0   400
    

    确保您的 C、D、E 列是数字,尝试使用 df.replace('', 0)df.fillna(0) 填充空白单元格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      相关资源
      最近更新 更多