如何用Pandas对比同DataFrame的值并新增列统计重复次数?
使用Pandas统计DataFrame中匹配组合的重复次数并新增列
要实现你要的效果,核心是先筛选出column1和column2值相等的行,统计这些匹配组合的出现次数,再将结果映射回原DataFrame,不匹配的行填0。以下是具体实现步骤:
1. 构造示例DataFrame
先还原你提供的输入数据:
import pandas as pd data = { 'id': [0, 1, 2, 3, 4], 'column1': ['a', 'b', 'a', 'c', 'b'], 'column2': ['a', 'b', 'c', 'c', 'b'] } df = pd.DataFrame(data)
2. 统计匹配组合的次数
先标记出两列值相等的行,再通过groupby统计这些组合的出现频次:
# 标记column1和column2值相等的行 df['is_match'] = df['column1'] == df['column2'] # 统计匹配组合的出现次数 match_counts = df[df['is_match']].groupby(['column1', 'column2']).size().reset_index(name='count')
3. 合并结果并处理不匹配行
将统计结果合并回原DataFrame,对不匹配的行填充0,最后清理临时列:
# 合并统计结果到原表 df = df.merge(match_counts, on=['column1', 'column2'], how='left') # 不匹配的行count设为0,转换为整数类型 df['count'] = df['count'].fillna(0).astype(int) # 删除临时标记列 df = df.drop('is_match', axis=1)
最终输出
运行后得到的DataFrame如下:
id column1 column2 count 0 0 a a 1 1 1 b b 2 2 2 a c 0 3 3 c c 1 4 4 b b 2
高效替代方案(适合大数据集)
如果你的数据量较大,上面的方法效率更高。如果追求代码简洁,也可以用transform直接完成:
df['count'] = df.groupby(['column1', 'column2']).transform( lambda x: len(x) if x.iloc[0]['column1'] == x.iloc[0]['column2'] else 0 )
内容的提问来源于stack exchange,提问作者null92
相关产品推荐
相关产品推荐

