我有下表:
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/