如何高效为Pandas DataFrame添加E列值的全局计数列?
高效实现DataFrame添加列统计指定列值出现次数
需求说明
给定如下结构的DataFrame:
import pandas as pd data = { 'C1': [1, 4, 3, 8, 8], 'C2': [2, 9, 1, 2, 1], 'E': [3, 1, 1, 8, 2] } df = pd.DataFrame(data)
需要新增一列cou,该列值为对应行E列数值在整个E列中的出现次数,最终得到如下预期结果:
C1 C2 E cou 0 1 2 3 1 1 4 9 1 2 2 3 1 1 2 3 8 2 8 1 4 8 1 2 1
高效实现方法
以下两种方法都是pandas内部优化过的高效方案,适合处理大数据量:
方法1:value_counts() + map()
先统计E列各值的出现次数,再通过映射生成目标列:
# 统计E列每个值的出现次数 e_value_counts = df['E'].value_counts() # 将E列的值映射为对应的出现次数,生成cou列 df['cou'] = df['E'].map(e_value_counts)
方法2:groupby() + transform('count')
直接通过分组后广播计数结果,代码更简洁:
# 按E列分组,对每组计数并广播回原行 df['cou'] = df.groupby('E')['E'].transform('count')
两种方法都能快速得到预期结果,其中transform方式无需额外存储中间变量,代码更紧凑;value_counts方式逻辑更直观,适合需要复用计数结果的场景。
内容的提问来源于stack exchange,提问作者Cranjis
相关产品推荐
相关产品推荐

