下面有一个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。
请帮忙。非常感谢你们!
答案 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})