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

如何在DataFrame中新增列标记多列重复行的分组编号?

解决方案

可以通过Pandas的分组、计数和因子化功能实现需求,具体步骤如下:

步骤说明

  • 统计每行对应的column1/column2/column3组合的出现次数
  • 对出现次数≥2的组合分配唯一递增编号,出现次数=1的组合编号设为0
  • 同组重复行共享同一编号,编号从1开始

代码实现

import pandas as pd

# 构造原始DataFrame
data = {
    'id': [0,1,2,3,4,5,6,7],
    'column1': ['z','y','x','x','z','w','w','w'],
    'column2': ['x','y','x','x','y','w','w','w'],
    'column3': ['x','y','x','x','x','w','w','w']
}
df = pd.DataFrame(data)

# 1. 计算每组的出现次数
df['group_size'] = df.groupby(['column1', 'column2', 'column3'])['id'].transform('size')

# 2. 对重复组进行因子化编码
encoded, _ = pd.factorize(df.loc[df['group_size']>1, ['column1','column2','column3']].apply(tuple, axis=1))
df['counter'] = 0  # 非重复组默认设为0
df.loc[df['group_size']>1, 'counter'] = encoded + 1  # 编码加1,让编号从1开始

# 移除临时列(可选操作)
df = df.drop('group_size', axis=1)

print(df)

输出结果

id column1 column2 column3  counter
0   0       z       x       x        0
1   1       y       y       y        1
2   2       x       x       x        2
3   3       x       x       x        2
4   4       z       y       x        0
5   5       w       w       w        3
6   6       w       w       w        3
7   7       w       w       w        3

关键函数解释

  • groupby(...).transform('size'):为每行返回其所在组的总行数,快速判断该行是否属于重复组
  • pd.factorize():将离散的列组合映射为连续整数编码,确保同组对应同一编号
  • loc索引:精准定位重复组并分配编号,非重复组保持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.05 18:56:01