使用 Groupby 和 Sum 来减少数据帧

Use Groupby and Sum to reduce a dataframe

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

编辑:这里是创建数据框的代码。请注意名为 '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')

结果应按 'Baker' 分组并对其他三列求和。我尝试过各种不同的 groupby 和 pivot_table。他们 return 正确的两行(纽约和新泽西)但他们只有 return 'Baker' 和最右边一列的总和,'Echo.' 最左边的一列 'Able' 应该忽略源数据帧的索引。我的输出应该是这样的(感谢@corralien 发现了一个错误而编辑):

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

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

使用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) 来填充你的空白单元格。

将 space 替换为 0 和总和。这将取决于最后三列是什么类型。我为你重新制作了 df,如果我弄错了 dtype,请随时编辑并编辑问题。论坛会指导你。

数据框

   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