Вот один из подходов.Вы можете начать с получения всех комбинаций длины 2 из существующих столбцов, используя itertools.combinations
:
from itertools import combinations
c = combinations(df.T.values.tolist(), 2)
# [([0, 1, -1], [1, 1, 0]), ([0, 1, -1], [2, 0, 1]), ([1, 1, 0], [2, 0, 1])]
, а затем добавьте значения в каждом кортеже, сжатые вместе с:
from itertools import starmap
from operator import add
l = [list(starmap(add,zip(i,j))) for i,j in c]
pd.DataFrame(l, index=df.columns).T
col1 col2 col3
0 1 2 3
1 2 1 1
2 -1 0 1
Или, если numpy
также вариант:
import numpy as np
c = list(combinations(df.T.values.tolist(), 2))
pd.DataFrame(np.array(c).sum(1), index=df.columns).T
col1 col2 col3
0 1 2 3
1 2 1 1
2 -1 0 1