如何用Pandas向量化方法按行字段汇总列并追加结果至每行?
Pandas向量化实现按字段值汇总并追加新列
你可以用以下两种标准的Pandas向量化方法实现需求,完全不需要低效的iterrows迭代:
方法1:groupby + transform
这种方法通过分组后使用transform,将分组的计数结果广播回原DataFrame的每一行,逻辑直观且高效:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({'condition': [True, False, True, True, False, True, True]}) # 新增Count列:按condition分组后统计每组数量,并映射到每行 df['Count'] = df.groupby('condition')['condition'].transform('count')
执行后得到的结果与你的期望一致:
condition Count 0 True 5 1 False 2 2 True 5 3 True 5 4 False 2 5 True 5 6 True 5
方法2:value_counts + map
先统计每个值的出现次数,再通过map将对应计数映射到每行:
# 先获取condition列各值的计数 count_map = df['condition'].value_counts() # 映射生成Count列 df['Count'] = df['condition'].map(count_map)
这种方法代码更简洁,同样能得到完全一致的结果。
扩展说明
如果你的实际场景是基于多个字段计算的值(而非示例中的单一condition列),只需要先将计算结果生成一个临时列,再用上述任意一种方法即可。比如:
# 假设基于col1和col2计算得到key列 df['key'] = df['col1'] + df['col2'] # 用groupby+transform统计key的出现次数并追加 df['Count'] = df.groupby('key')['key'].transform('count')
内容的提问来源于stack exchange,提问作者Lai Yi-Ming
相关产品推荐
相关产品推荐

