【发布时间】:2023-02-25 04:39:17
【问题描述】:
设想
想象一个数据集是某个过程的结果。数据集包含两个 id 列,id1 和 id2,表示部分数据在前面的过程中来自哪里。两个 id 列可以是 int 或 string。我想根据存在的 id 创建一个唯一的 id两个都其中是专栏。但是,id 的顺序并不重要.例如:
id1 == A 和id2 == NaN 与id1 == NaN 和id2==A 相同,因为存在的唯一“真实”ID 是A。 id 值可以是单个字母、数字或字符串。
测试数据
>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame({'id1': ['A', np.nan, 'A'], 'id2': [np.nan, 'B', 'B']})
>>> df
id1 id2
0 A NaN
1 NaN B
2 B B
核心问题
当排序不重要时,如何使用 pandas 和 numpy 函数基于 id1 和 id2 的组合创建一个唯一的 id?
其他相关回答
In Pandas, how to create a unique ID based on the combination of many columns?
Grouping by multiple columns to find duplicate rows pandas
我试过的事情
- 将 id1 和 id2 强制转换为字符串,组合、排序和删除重复项(有效但很混乱)
-
pd.factorize: 看起来比上面的好,但仍然需要 id1 和 id2 的组合和排序
期望的输出
>>> df
id1 id2 combined_id
0 A NaN A
1 NaN B B
2 A B AB
3 NaN NaN NaN
【问题讨论】:
-
B A会是AB吗,因为顺序并不重要,还是会是BA?