我有一个数据框,如下图所示。我目前有两列显示某人遭受的伤害,旁边的一列代表该人错过的比赛(如果他们因受伤错过了比赛则为 1,如果他们没有因受伤错过比赛则为无伤害)。在第三列而不是 Nan 中,我希望汇总该球员因伤缺席的比赛数量。正如你所看到的,这名球员在第一周就遭受了脑震荡并缺席了一场比赛,但在接下来的一周里却没有缺席。因此他因脑震荡缺席了一场比赛。我希望该行看起来像:
Injury Game Missed Games Missed Due To Injury
Concussion 1 (Concussion,1)
Concussion 0 (Concussion,1)
No Injury No Injury Nan
Shoulder 1 (Shoulder,1)
Shoulder No Injury (Shoulder,1)
Shoulder 1 (Shoulder,2)
Shoulder 1 (Shoulder,3)
如何在 Pandas 中实现这一目标?
谢谢!
最佳答案
使用Series.groupby
计算 cumsum
,在此之前使用 pd.to_numeric
和 Series.fillna
将“无伤害”替换为“0”,以便转换为整数( Series.astype
)来计算累积和。
计算总和后,转换为 str 并使用 Series.str.cat
将其连接到 Injury 列。 :
missed=pd.to_numeric(df['Game Missed'],errors='coerce').fillna(0).astype(int).groupby(df['Injury']).cumsum()
df['Games Missed Due To Injury']=( missed.astype(str)
.str.cat(df['Injury'],sep=',')
.mask(df['Injury'].str.contains('No')) )
print(df)
<小时/>
Injury Game Missed Games Missed Due To Injury
0 Concussion 1 1,Concussion
1 Concussion 0 1,Concussion
2 No Injury No Injury NaN
3 Shoulder 1 1,Shoulder
4 Shoulder No Injury 1,Shoulder
5 Shoulder 1 2,Shoulder
6 Shoulder 1 3,Shoulder
注意,您可以使用您需要的掩码:
df['Injury'].str.contains('No')
df['Injury'].eq('No Injury')
df['Injury'].str.contains('No Injury',case=False)
关于python - 如何根据其他 2 列聚合 pandas 列的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58755032/