我有一个将人们联系在一起的数据框。例如,
>>> 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_id
和f_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,而忽略列的顺序。
答案 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