如何在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
相关产品推荐
相关产品推荐

