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

如何在Pandas中添加排除自身的col_1&col_2重复行计数新列

解决Pandas添加分组计数列(排除当前行)的问题

问题重现

你有如下DataFrame:

col_1   col_2
6       A       
2       A       
5       B       
3       C       
5       C       
3       B       
6       A       
6       A       
2       B       
2       C       
5       A       
5       B

需要新增col_new列,统计与当前行col_1和col_2组合完全相同的行数(排除当前行),期望输出:

col_1   col_2   col_new
6       A       2
2       A       0
5       B       1
3       C       0  
5       C       0
3       B       0
6       A       2
6       A       2
2       B       0
2       C       0
5       A       0
5       B       1   

你尝试的代码df['col_new'] = df.groupby(['col_1', 'col_2']).count()报错:TypeError: incompatible index of inserted column with frame index。

错误原因

groupby(['col_1', 'col_2']).count()返回的是分组聚合后的结果,它的索引是(col_1, col_2)的组合,和原DataFrame的默认整数索引不匹配,直接赋值自然会出现索引兼容问题。

正确解决方案

使用groupby.transform('size')来实现,它会将分组的统计结果广播回原DataFrame的每一行,保证索引匹配,最后减1排除当前行:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'col_1': [6,2,5,3,5,3,6,6,2,2,5,5],
    'col_2': ['A','A','B','C','C','B','A','A','B','C','A','B']
})

# 添加col_new列
df['col_new'] = df.groupby(['col_1', 'col_2'])['col_1'].transform('size') - 1

代码解释

  • groupby(['col_1', 'col_2']):按col_1和col_2的组合分组
  • .transform('size'):计算每个分组的总行数,并将结果映射到原DataFrame的对应行上(比如所有(6,A)的行都会得到3)
  • - 1:减去当前行本身,得到排除自身后的同组合行数

运行后得到的结果完全符合你的期望。

内容的提问来源于stack exchange,提问作者Apook

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:31:58