如何在熊猫中为链接对创建唯一的夫妇ID

时间:2019-08-01 20:18:28

标签: python pandas

我有一个将人们联系在一起的数据框。例如,

>>> import pandas as pd
>>> df = pd.DataFrame([[1,2],[2,1],[3,4],[5,6],[4,3],[6,5]], columns=['m_id', 'f_id'])
>>> df
   m_id  f_id
0     1     2
1     2     1
2     3     4
3     5     6
4     4     3
5     6     5

我的目标是创建第三列,为每对m_idf_id创建唯一的ID。例如,下面的期望输出。

>>> df
   m_id  f_id  shared_id
0     1     2          0
1     2     1          0
2     3     4          1
3     5     6          2
4     4     3          1
5     6     5          2

更新

这不是this question的重复项,因为我没有尝试从典型的groupby取回组ID。就我而言,我有两列,我想根据一行中的两个元素是否与其他行中的两个元素相同来分配组ID,而忽略列的顺序。

2 个答案:

答案 0 :(得分:3)

IIUC

pd.DataFrame(np.sort(df.values,1),index=df.index).groupby([0,1]).ngroup()
Out[94]: 
0    0
1    0
2    1
3    2
4    1
5    2
dtype: int64

答案 1 :(得分:1)

使用数字值,可以在排序后使用np.unique来获取组。

df['share_id'] = np.unique(np.sort(df.to_numpy(), axis=1), axis=0, return_inverse=True)[1]

   m_id  f_id  share_id
0     1     2         0
1     2     1         0
2     3     4         1
3     5     6         2
4     4     3         1
5     6     5         2