python - 如何在执行某些操作时融化数据帧?

标签 python pandas

假设我有以下数据框:

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/

相关文章:

python - 如何通过加入只保留 pandas group 的第一个和最后一个项目

python - 对不存在的数组使用 numpy View

python - 从导出按钮中提取 CSV

python - 如何将动态pyplot保存为电影文件?

python - 为什么在 CUDA 内核中没有断点的情况下执行相同的程序时,cuda-gdb 比 gdb 慢很多?

python - tkinter 单击后无法更改单选按钮的外观

python - 如何使用 2 个 pandas DataFrame 计算 IOU(重叠)

Python/Matplotlib 子图 - 堆积条形图 - 为类别设置固定颜色

python - 如何读取 json-dictionary 类型的文件

pandas - 如何根据行的值将每一行乘以一个数字?