Python在groupby中使用sum()时保留其他列

2024-05-23 16:03:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框如下:

    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'分组(不是带value2的和值1!!!但在每一列中分别求和)

期望得到以下结果:

    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()

哪个组通过正确命名value1和value2列并对其求和,但最终会删除otherstuff1和otherstuff2列。

请帮忙。非常感谢你们!


Tags: 数据name名称dfindexasmarkjack
3条回答

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

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

像这样的?(假设您的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

您应该指定panda必须对其他列执行的操作。在你的情况下,我认为你想保留一行,不管它在组内的位置如何。

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

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

相关问题 更多 >