使用 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
我有一个数据框,其中一列中有一些重复值。我想按该列分组并对其他列求和。数据框如下所示:
编辑:这里是创建数据框的代码。请注意名为 '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