我有两个数据帧
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
但到目前为止我一直无法这样做。我试过倍增等,但无济于事。我可以使用循环来做到这一点,但有一种优雅的方法吗?
干杯,迈克
答案 0 :(得分:2)
考虑数据框d1
和d2
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
<强> 注 强>
这相当于展平每对列的outer
个产品。 不 cross
个产品。
答案 1 :(得分:0)
对于python 3.7,给定数据帧data1
和data2
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