我有一个看起来像这样的数据框:

        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/

10-12 22:50