Интересное решение. Но мне интересно создать фиктивную колонку только для слияния ...
вая данные кадра:
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
Есть ли более простой способ?