假设我有以下数据框:
index K1 K2 D1 D2 D3
N1 0 1 12 4 6
N2 1 1 10 2 7
N3 0 0 3 5 8
基本上,我想将此数据框转换为以下内容:index COL1 COL2
K1 D1 = 0*12+1*10+0*3
K1 D2 = 0*4+1*2+0*5
K1 D3 = 0*6+1*7+0*8
K2 D1 = 1*12+1*10+0*3
K2 D2 = 1*4+1*2+0*5
K2 D3 = 1*6+1*7+0*8
COL2
的内容基本上是 index
中向量之间的点积(又名标量积)和 COL1
中的那个.例如,让我们取结果 df 的第一行。下 index
, 我们有 K1
并且,根据 COL1
我们有 D1
.查看第一个表,我们知道 K1 = [0,1,0]
和 D1 = [12,10,3]
.这两个“向量”的标量积就是COL2
里面的值(第一行)。我试图找到一种不使用嵌套循环的方法(因为这个想法是为了提高效率),但是,我不知道如何做到这一点。我尝试使用
pd.melt()
功能,虽然它让我更接近我想要的,但它并没有让我到达我想要的地方。你能给我一个提示吗?
最佳答案
这是矩阵乘法:
(df[['D1','D2','D3']].T@df[['K1','K2']]).unstack().reset_index()
输出: level_0 level_1 0
0 K1 D1 10
1 K1 D2 2
2 K1 D3 7
3 K2 D1 22
4 K2 D2 6
5 K2 D3 13
关于python - 如何在执行某些操作时融化数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64362032/