Python将sum()与groupby一起使用时保留其他列

时间:2018-04-11 19:36:55

标签: python pandas

下面有一个pandas数据框:

    df

    name    value1    value2  otherstuff1 otherstuff2 
0   Jack       1         1       1.19        2.39     
1   Jack       1         2       1.19        2.39
2   Luke       0         1       1.08        1.08  
3   Mark       0         1       3.45        3.45
4   Luke       1         0       1.08        1.08

相同"名称"对于otherstuff1和otherstuff2将具有相同的值。

我试图通过专栏分组' name'和总和' value1'和总和' value2' (不要将value1与value2相加!!!但是在每列中单独求和)

期望得到以下结果:

    newdf

    name    value1    value2  otherstuff1 otherstuff2 
0   Jack       2         3       1.19        2.39     
1   Luke       1         1       1.08        1.08  
2   Mark       0         1       3.45        3.45

我已经尝试了

newdf = df.groupby(['name'], as_index = False).sum()

哪些groupby命名并正确地汇总value1和value2列,但最终删除了列的其他内容:othertuff1和otherstuff2。

请帮忙。非常感谢你们!

3 个答案:

答案 0 :(得分:2)

有类似的东西吗?(假设你有相同名字的otherstuff1和otherstuff2)

df.groupby(['name','otherstuff1','otherstuff2'],as_index=False).sum()
Out[121]: 
   name  otherstuff1  otherstuff2  value1  value2
0  Jack         1.19         2.39       2       3
1  Luke         1.08         1.08       1       1
2  Mark         3.45         3.45       0       1

答案 1 :(得分:2)

您应该指定哪些pandas必须对其他列执行。在您的情况下,我认为您想保留一行,无论其在组内的位置如何。

这可以通过组agg来完成。 agg接受一个参数,该参数指定应对每列执行的操作。

df.groupby(['name'], as_index=False).agg({'value1': 'sum', 'value2': 'sum', 'otherstuff1': 'first', 'otherstuff2': 'first'})

答案 2 :(得分:0)

上面答案中的键实际上是“ as_index = False”,否则列表中的所有列都会在索引中使用。

p_summ = p.groupby(attribute_list,as_index = False).agg({'AMT':sum})