我有这个数据框:
Group Turn Name
0 G1 1 Maria
1 G1 2 Sam
2 G1 2 Sara
3 G1 3 Maria
4 G1 4 Mark
5 G1 5 Maria
6 G2 2 Maria
7 G2 1 Ahmad
8 G3 1 Maria
9 G3 2 David
我想根据“组”列的值对数据进行分组,并根据其“回合”进行排序。因此,每个组的轮次都是排序的。
然后我想对名称为“Maria”的行及其后一行的每组中“Turn”列的值求和。如果玛丽亚是该组的最后一个回合,则仅求和 轮到玛丽亚了。
So the result looks like this:
Group Name Sum
G1 Maria 3
G1 Maria 7
G1 Maria 5
G2 Maria 2
G3 Maria 3
我尝试了 group by、apply 和 shift,但它们都没有给出我想要的最终结果。
df = df.groupby('group').apply(lambda x: x.sort_values('Turn'))
有人可以帮助我吗?
最佳答案
您可以将 ffill
与 limit
一起使用
df=df.sort_values(['Group','Turn'])
df[df.Name.where(df.Name=='Maria').groupby(df['Group']).ffill(limit=1).eq('Maria')].set_index('Group').Turn.sum(level=0)
Out[272]:
Group
G1 5
G2 3
G3 3
Name: Turn, dtype: int64
关于Python Pandas : Sort and group by, 然后对第二列的两个连续行求和以获得第三列的特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51729647/