我在下面有一个熊猫数据框:
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)
您应该指定其他列必须处理的熊猫。就您而言,我想无论该行在组中的位置如何,都希望保留一行。
这可以agg在一个小组中完成。agg接受一个参数,该参数指定应为每一列执行的操作。
df.groupby(['name'], as_index=False).agg({'value1': 'sum', 'value2': 'sum', 'otherstuff1': 'first', 'otherstuff2': 'first'})
Run Code Online (Sandbox Code Playgroud)