Python Pandas : Sort and group by, 然后对第二列的两个连续行求和以获得第三列的特定值

标签 python pandas group-by sum aggregate

我有这个数据框:

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

有人可以帮助我吗?

最佳答案

您可以将 ffilllimit 一起使用

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/

相关文章:

python - 无法访问数据框列

mysql - 在 MySQL 表中旋转

MYSQL通过选择要显示的元素来加入排序和分组

python - 为什么我仍然得到 "E: Unable to locate package python-networkx"和 "E: Unable to locate package python-pystache"?

python - 如何在 Pootle 中按总体完成情况显示排序列表

python - 添加来自 2 个不同数据框 pandas 的两列值

python - 如何按列值的计数进行分组并对其进行排序?

mysql - 我可以不在查询中而只在 group by() 中使用 case 语句吗?

python - 在数据框中查找列的共现

python - undefined variable 和作用域规则