我有一个看起来像这样的数据框:
id name
0 12 molly
1 12 james
2 10 adam
3 8 susan
4 10 molly
5 9 pete
6 2 james
7 10 Bob
8 8 james
9 2 adam
10 12 Gary
我想基于带有cols'name_x'和'name_y'的ID号创建'成对'列,其中两个名称具有相同的ID,如下所示:
id name_x name_y
0 12 molly james
1 12 molly gary
2 12 gary james
3 10 adam molly
4 10 adam Bob
5 10 molly Bob
6 8 susan james
7 2 james adam
我知道某个地方必须有解决方案,但是我想不出正确的术语来找到它!
最佳答案
让我们使用itertools.combinations:
from itertools import combinations
df.groupby('id')['name']\
.apply(lambda x: pd.DataFrame((i for i in combinations(x.values,2))))\
.reset_index().drop('level_1',axis=1)\
.rename(columns={0:'name_x',1:'name_y'})
输出:
id name_x name_y
0 2 james adam
1 8 susan james
2 10 adam molly
3 10 adam Bob
4 10 molly Bob
5 12 molly james
6 12 molly Gary
7 12 james Gary
关于python - Pandas DataFrame-基于唯一ID的“成对”连接作为新列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48196275/