如何为已有DataFrame添加按组统计的条件计数列
解决方案
方法一:直接生成目标列(最简洁)
利用groupby + transform可以直接在原DataFrame上生成分组统计列,自动将结果匹配到每一行,无符合条件的分组会自动填充0:
# 按索引(Data Tech Group)分组,统计每组中Severity等于2的条目数 df['Sev 2 count'] = df.groupby(df.index)['Severity'].transform(lambda x: (x == 2).sum())
- 原理:
(x == 2)会将每组内的Severity值转为布尔值,sum()统计True的数量(即符合条件的条目数);transform会把统计结果广播到该组的每一行,确保原DataFrame的行数和结构不变。
方法二:先统计再合并(更直观)
如果需要先单独查看分组统计结果,再合并到原DataFrame:
# 筛选Severity=2的行,按索引分组统计数量 sev2_stats = df[df['Severity'] == 2].groupby(df.index).size().reset_index(name='Sev 2 count') # 左连接合并到原DataFrame,缺失值填充为0 df = df.merge(sev2_stats, left_index=True, right_on='Data Tech Group', how='left') df['Sev 2 count'] = df['Sev 2 count'].fillna(0) # 恢复原索引(如果合并后索引被修改) df.set_index('Data Tech Group', inplace=True)
- 说明:
size()用于统计每组的行数,比count()更准确(count()会受列中空值影响);merge用左连接保证原DataFrame的所有行都被保留,fillna(0)处理无符合条件条目的分组。
内容的提问来源于stack exchange,提问作者Kyzoki
相关产品推荐
相关产品推荐

