Давайте использовать itertools.combinations
:
from itertools import combinations
pd.concat([df.loc[[i,j]]
.unstack()
.set_axis(["A","A'","B","B'"], axis=0, inplace=False)
.to_frame(name=(i,j)).T
for i, j in combinations(df.index, 2)])
Выходной фрейм данных с мультииндексом:
A A' B B'
0 1 0.5 0.70 12.0 16.0
2 0.5 0.90 12.0 20.0
3 0.5 0.11 12.0 24.0
1 2 0.7 0.90 16.0 20.0
3 0.7 0.11 16.0 24.0
2 3 0.9 0.11 20.0 24.0
Или как индекс со строкой
pd.concat([df.loc[[i,j]]
.unstack()
.set_axis(["A","A'","B","B'"], axis=0, inplace=False)
.to_frame(name='('+str(i)+','+ str(j)+')').T
for i,j in combinations(df.index,2)]))
Выход:
A A' B B'
(0,1) 0.5 0.70 12.0 16.0
(0,2) 0.5 0.90 12.0 20.0
(0,3) 0.5 0.11 12.0 24.0
(1,2) 0.7 0.90 16.0 20.0
(1,3) 0.7 0.11 16.0 24.0
(2,3) 0.9 0.11 20.0 24.0