使用pandas为每个组创建组合的DataFrame

Kei*_*iku 5 python pandas

输入如下.

Out[178]: 
  group value
0     A     a
1     A     b
2     A     c
3     A     d
4     B     c
5     C     d
6     C     e
7     C     a
Run Code Online (Sandbox Code Playgroud)

对于此输入,我想为每个组创建一个组合并创建一个DataFrame.我该怎么做?

我想得到的输出:

Out[180]: 
  group  0  1
0     A  a  b
1     A  a  c
2     A  a  d
3     A  b  c
4     A  b  d
5     A  c  d
0     C  d  e
1     C  d  a
2     C  e  a
Run Code Online (Sandbox Code Playgroud)

piR*_*red 8

使用combinations在修真

from itertools import combinations

pd.DataFrame([
    [n, x, y]
    for n, g in df.groupby('group').value
    for x, y in combinations(g, 2)
], columns=['group', 0, 1])

  group  0  1
0     A  a  b
1     A  a  c
2     A  a  d
3     A  b  c
4     A  b  d
5     A  c  d
6     C  d  e
7     C  d  a
8     C  e  a
Run Code Online (Sandbox Code Playgroud)


jez*_*ael 5

groupby与lambda函数一起使用和combinations:

from  itertools import combinations

df = (df.groupby('group')['value'].apply(lambda x: pd.DataFrame(list(combinations(x,2))))
        .reset_index(level=1, drop=True)
        .reset_index())
print (df)
  group  0  1
0     A  a  b
1     A  a  c
2     A  a  d
3     A  b  c
4     A  b  d
5     A  c  d
6     C  d  e
7     C  d  a
8     C  e  a
Run Code Online (Sandbox Code Playgroud)