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

如何在Pandas DataFrame中为反向出现的两列值分配相同标识值

解决Pandas为反向配对行分配唯一标识的问题

正确实现代码

import pandas as pd
import numpy as np

# 示例数据
g = pd.DataFrame({
    'Column_a': [6, 7, 11, 10, 12, 15],
    'Column_b': [7, 6, 10, 11, 15, 12]
})

# 对每行的两列值进行排序,生成一致的配对键
sorted_pairs = np.sort(g[['Column_a', 'Column_b']], axis=1)
# 将排序后的配对转为元组,作为分组依据生成唯一ID
g['New'] = pd.factorize(list(zip(sorted_pairs[:, 0], sorted_pairs[:, 1])))[0] + 1

print(g)

输出结果

Column_a  Column_b  New
0         6         7    1
1         7         6    1
2        11        10    2
3        10        11    2
4        12        15    3
5        15        12    3

原代码问题分析

你之前的代码 g['New']=pd.DataFrame(np.sort(g[['Column_a','Column_b']])).duplicated(keep=False).astype(int) 之所以全部返回1,是因为 duplicated(keep=False) 仅标记是否属于重复组,所有重复行都会被标记为True(转为int就是1),但无法区分不同的重复组。

核心思路说明

  1. 统一配对顺序:用np.sort(..., axis=1)对每行的两列值排序,让(6,7)和(7,6)都变成(6,7),确保同一配对的行有一致的标识依据。
  2. 生成唯一组ID:用pd.factorize()为每个唯一的排序配对分配一个整数ID,+1是为了让ID从1开始(默认从0开始)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:37:45