繁体   English   中英

Python Pandas:排序和分组,然后对第二列的两个连续行求和,得出第三列的特定值

[英]Python Pandas: Sort and group by, then sum two consecutive rows of 2nd column for a specific value of a 3rd column

我有这个数据框:

    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”列的值求和。 如果Maria是该组中的最后一个回合,则仅是Maria的回合之和。

So the result looks like this:
    Group       Name    Sum 
        G1      Maria    3
        G1      Maria    7
        G1      Maria    5
        G2      Maria    2
        G3      Maria    3

我尝试了分组,应用和轮换,但没有一个能给我最终的结果。

 df = df.groupby('group').apply(lambda x: x.sort_values('Turn'))

有人可以帮我吗?

采用:

df.set_index(['Group','Name',(df['Name'] == 'Maria').cumsum().rename('Occurance')])\
  .sum(level=[0,2])\
  .reset_index()\
  .assign(name='Maria')\
  .drop('Occurance', axis=1)

输出:

  Group  Turn   name
0    G1     3  Maria
1    G1     7  Maria
2    G1     5  Maria
3    G2     3  Maria
4    G3     3  Maria

您可以使用limit ffill

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM