【问题标题】:Subtracting one column from multiple other columns从其他多列中减去一列
【发布时间】:2023-03-12 00:46:01
【问题描述】:

我有一个 7 列的数组,我试图从所有其他列中减去第一列。现在我的代码如下所示:

a  = (q[:,0]-q[:,1])**2
a1 = (q[:,0]-q[:,2])**2
a2 = (q[:,0]-q[:,3])**2
a3 = (q[:,0]-q[:,4])**2
a4 = (q[:,0]-q[:,5])**2
a5 = (q[:,0]-q[:,6])**2

这很好用,只是我尝试对许多文件执行此操作,而且效率极低。有没有更有效的方法来编写相同的代码?

谢谢

【问题讨论】:

    标签: python arrays matrix subtraction


    【解决方案1】:

    如果你想从所有其他列中减去第一列,你可以这样做

    import numpy as np
    x = np.arange(40).reshape(8, 5) #sample data
    y = (x - x[:,0,None])**2
    

    x[:,0,None] 代表第一列。如果您只是尝试x - x[:,0],numpy 无法将形状一起广播(在这种情况下为 (8, 5) 和 (8,))。添加x[:,0,None](或x[:,0,np.newaxis])使第二个形状(8, 1)和numpy可以一起广播两者。

    【讨论】:

    • 您能展示如何在 pandas 数据框上执行此操作吗?我可以将减法的结果写入新列吗?我希望能够比较减法并找到 % 差异。
    • @MurtazaHaji 我会查看pandas documentation 或打开一个新问题。但很确定你可能只需要df["new_column"] = df - df["col_of_interest"]