Интересное решение. Но мне интересно создать фиктивную колонку только для слияния ...

вая данные кадра:

    id  value
0    1     a
1    2     b
2    3     c

Я хочу получить новый фрейм данных, который является в основном декартовым произведением каждой строки друг с другомисключая себя:

    id  value id_2 value_2
0    1     a     2    b
1    1     a     3    c
2    2     b     1    a
3    2     b     3    c
4    3     c     1    a
5    3     c     2    b

Это мой подход на данный момент. Я использую itertools, чтобы получить продукт, а затем используюpd.concat с участиемdf.loc чтобы получить новый фрейм данных.

from itertools import product

ids = df.index.values
ids_1, ids_2 = list(zip(*filter(lambda x: x[0] != x[1], product(ids, ids))))

df_new = pd.concat([df.loc[ids_1, :].reset_index(), df.loc[ids_2, :].reset_index()], 1).drop('index', 1)

df_new

   id value  id value
0   1     a   2     b
1   1     a   3     c
2   2     b   1     a
3   2     b   3     c
4   3     c   1     a
5   3     c   2     b

Есть ли более простой способ?