python - Pandas 在非唯一值上自连接

标签 python pandas dataframe

我有下表:

       ind_ID  pair_ID orig_data
0           A        1         W 
1           B        1         X
2           C        2         Y
3           D        2         Z
4           A        3         W          
5           C        3         X          
6           B        4         Y          
7           D        4         Z          

每一行都有一个 individual_ID 和一个与其他行共享的 pair_ID。我想要进行自连接,以便每一行都有其原始数据,并且与它共享 pair_ID 的行的数据:

       ind_ID  pair_ID orig_data partner_data
0           A        1         W            X
1           B        1         X            W
2           C        2         Y            Z
3           D        2         Z            Y
4           A        3         W            X
5           C        3         X            W
6           B        4         Y            Z
7           D        4         Z            Y

我已经尝试过:

df.join(df, on='pair_ID')

但显然,由于 pair_ID 值不是唯一的,我得到:

       ind_ID  pair_ID orig_data partner_data
0           A        1         W          NaN
1           B        1         X          NaN
2           C        2         Y          NaN
3           D        2         Z          NaN
4           A        3         W          NaN
5           C        3         X          NaN
6           B        4         Y          NaN
7           D        4         Z          NaN 

我还考虑过创建一个连接 ind_ID+pair_ID 的新列,该列将是唯一的,但连接将不知道要匹配什么。

是否可以在 pair_ID 上进行自连接,其中每行都与非自身的匹配行连接?

最佳答案

在您的情况下(只有两对) - 您可能可以根据 ID 进行分组和转换,然后反转组中值的顺序,例如:

df.loc[:, 'partner_data'] = df.groupby('pair_ID').orig_data.transform(lambda L: L[::-1])

这给你:

  ind_ID  pair_ID orig_data partner_ID
0      A        1         W          X
1      B        1         X          W
2      C        2         Y          Z
3      D        2         Z          Y
4      A        3         W          X
5      C        3         X          W
6      B        4         Y          Z
7      D        4         Z          Y

关于python - Pandas 在非唯一值上自连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48874411/

相关文章:

python - 绘图时将 pandas (python) 分类 x 轴转换为连续值

python - 将值拆入 Pandas DataFrame 中的不同行

python - 将数据传输到 excel 时如何处理 "old"日期

r - 如何有选择地将列转换为 data.frame 中的行?

Python Pandas 两个条件数据框 groupby 运行排序

python - Spyder 代理设置

python - 如果 (b,a) 存在,则从 python 元组列表中删除 (a,b)

r - 连接数据帧而不返回所有匹配组合

python - 我可以让 PyInstaller 优化编译吗?

python - 如何使用 python 从 xml 中有效地提取 <![CDATA[]> 内容?