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

Swa*_*agZ 3 python 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
Run Code Online (Sandbox Code Playgroud)

相同的“名称”将对otherstuff1和otherstuff2具有相同的值。

我正在尝试按“名称”列进行分组,并将“值1”列与“值2”列相加(不是将“值1”与“值2”相加!!但要在每列中分别对其求和)

期望得到以下结果:

    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
Run Code Online (Sandbox Code Playgroud)

我试过了

newdf = df.groupby(['name'], as_index = False).sum()
Run Code Online (Sandbox Code Playgroud)

它按名称分组并正确汇总了value1和value2列,但最终删除了列otherstuff1和otherstuff2。

请帮忙。非常感谢你们!

WeN*_*Ben 17

类似于

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
Run Code Online (Sandbox Code Playgroud)


Guy*_*ush 7

您应该指定其他列必须处理的熊猫。就您而言,我想无论该行在组中的位置如何,都希望保留一行。

这可以agg在一个小组中完成。agg接受一个参数,该参数指定应为每一列执行的操作。

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

  • 如果我有很多 otherstuff 列怎么办?我应该遍历所有其他列并创建一个字典吗? (7认同)
  • 您可以首先通过删除其他列来计算所需列的总和,然后将结果数据帧与其索引上的旧数据帧合并。 (2认同)