Python Pandas:排序和分组依据,然后将第2列的两个连续行相加,得到第3列的特定值

2024-05-19 19:17:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个数据帧:

    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

我想根据列“group”的值对数据进行分组,并根据它们的“Turn”进行排序。因此,每一组的转弯都被分类。在

然后,我想将每个组中“Turn”列的值求和,这些行的名称是“Maria”,后面还有一行。如果玛丽亚是小组的最后一个回合,那么总数就只有 轮到玛丽亚了。在

^{pr2}$

我试过分组,申请和转换,但没有一个给我的最终结果,我正在寻找。在

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

有人能帮帮我吗?在


Tags: 数据namedfsamgroupturndavidmark
2条回答

您可以将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

使用:

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

输出:

^{pr2}$

相关问题 更多 >