python - 如何根据其他 2 列聚合 pandas 列的计数
问题描述
我有一个数据框,如下图所示。我目前有 2 列显示某人遭受的伤害,旁边的列代表该人错过的比赛(如果他们因受伤缺席比赛,则为 1,如果他们没有因受伤缺席比赛,则为无伤)。在第三列而不是 Nan 我想汇总球员因伤缺席的比赛次数。所以你可以看到球员在第一周有脑震荡并错过了一场比赛,但在接下来的一周内没有。因此,由于脑震荡,他缺席了1场比赛。我希望该行看起来像:
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
'No Injury' 替换为 '0' 以便转换为整数 ( Series.astype
) 以计算累积和。计算总和后,转换为 str 并使用以下方法将其加入 Injury 列Series.str.cat
:
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)
推荐阅读
- html - 为什么我得到一个黑页?
- pytorch-lightning - 如何使用 TFT 模型正确修复 pytorch 预测中的随机种子?
- angular - 如何将 ag-grid-community 从版本 20.1.0 更新到 24.1.0?
- python-3.x - 如何在 python 中使用子进程将值放入 cmd 命令的响应中
- android - 碳足迹计算方法
- python - 将数据从 Kivy Python 更新到 Excel
- python - 如何使用 Python 比较两个图像以判断它们是否相似?
- django - Django Rest 框架和通道,您不能从异步上下文中调用它
- python - 处理看不见的标签
- abaqus - 要求isight等待输出文件是什么意思?