You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 22:15:28