首页 > 解决方案 > 在与 ID 关联的单个列中查找所有 2 个部分排列

问题描述

我正在尝试做以下事情:

group id    value
   1         a
   1         b
   1         c
   2         b
   2         c
   2         d

进入这种性质的东西:

group id    value1   value2
   1         a        b
   1         a        c
   1         b        a
   1         b        c  
   1         c        a
   1         c        b
   2         b        c
   2         b        d
   2         c        b
   2         c        d
   2         d        b
   2         d        c

我在 R 中找到了解决方案,但在 Python 中找不到类似的解决方案。

标签: pythonpermutation

解决方案


您可以分组group_id并申请itertools.permutations

import pandas as pd
df = pd.DataFrame({ 'group_id': [1]*3 + [2]*3, 'value': list('abcbcd') })
from itertools import permutations
(df.groupby('group_id')
   .apply(lambda x: pd.DataFrame(permutations(x.value, 2), columns=['value1', 'value2']))
   .droplevel(1))

输出:

    value1   value2
group_id     
1        a        b
1        a        c
1        b        a
1        b        c
1        c        a
1        c        b
2        b        c
2        b        d
2        c        b
2        c        d
2        d        b
2        d        c

推荐阅读