kronecker产品pandas数据帧

时间:2016-10-01 22:30:53

标签: pandas dataframe

我有两个数据帧

    A  B
0   1  2
1   1  2
2   1  2

    C  D
0   1  4
1   2  5
2   3  6

我需要交叉产品的平均值(AC,AD,BC,BD)。因此我希望能够计算

    AC  AD BC BD 
0   1   4  2   8
1   2   5  4  10
2   3   6  6  12

但到目前为止我一直无法这样做。我试过倍增等,但无济于事。我可以使用循环来做到这一点,但有一种优雅的方法吗?

干杯,迈克

2 个答案:

答案 0 :(得分:2)

考虑数据框d1d2

d1 = pd.DataFrame([[1, 2]] * 3, columns=list('AB'))
d2 = pd.DataFrame(np.arange(1, 7).reshape(2, 3).T, columns=list('CD'))

然后kronecker产品

kp = pd.DataFrame(np.kron(d1, d2), columns=pd.MultiIndex.from_product([d1, d2]))
kp

enter image description here

<强>
这相当于展平每对列的outer个产品。 cross个产品。

答案 1 :(得分:0)

对于python 3.7,给定数据帧data1data2

def kronecker(data1:'Dataframe 1',data2:'Dataframe 2'):
Combination = pd.DataFrame(); d1 = pd.DataFrame()
for i in data2.columns:
    d1 = data1.multiply(data2[i] , axis="index")
    d1.columns = [f'{i}{j}' for j in data1.columns]
    Combination = pd.concat([Combination, d1], axis = 1)
return Combination