Python 如何用另一列中的每个值减去一列值(熊猫)

Python 如何用另一列中的每个值减去一列值(熊猫),python,pandas,numpy,Python,Pandas,Numpy,我有两列A和B。我想用A列中的每个值减去B列的值,然后创建一个新列,而不使用for循环 下面是我的数据框架 A B 0 5 3 1 3 2 2 8 1 期望输出 A B C D E 0 5 3 2 3 4 1 3 2 0 1 2 2 8 1 5 6 7 C = A - B[0] D = A - B[1] E = A - B[2] 使用numpy的数组: 结果:

我有两列A和B。我想用A列中的每个值减去B列的值,然后创建一个新列,而不使用for循环

下面是我的数据框架

    A   B
0   5   3
1   3   2
2   8   1
期望输出

    A   B   C   D   E
0   5   3   2   3   4   
1   3   2   0   1   2
2   8   1   5   6   7

C = A - B[0]
D = A - B[1]
E = A - B[2]
使用numpy的数组:

结果:

   A  B  C  D  E
0  5  3  2  3  4
1  3  2  0  1  2
2  8  1  5  6  7
说明

>>> df['A'].values[:, None]

array([[5],
       [3],
       [8]])

>>> df['B'].values

array([3, 2, 1])
减去它们时,numpy将df['A']的值[:,None]拉伸到:

array([[5, 5, 5],
       [3, 3, 3],
       [8, 8, 8]])
array([[3, 2, 1],
       [3, 2, 1],
       [3, 2, 1]])
df['B']。值
至:

array([[5, 5, 5],
       [3, 3, 3],
       [8, 8, 8]])
array([[3, 2, 1],
       [3, 2, 1],
       [3, 2, 1]])
减法的结果是:

array([[2, 3, 4],
       [0, 1, 2],
       [5, 6, 7]])
给你:

d = pd.DataFrame.from_dict({'A': {0: 5, 1: 3, 2: 8}, 'B': {0: 3, 1: 2, 2: 1}})
m = d.shape[0]
cols = [chr(67 + x) for x in range(m)]
d.join(pd.DataFrame(np.broadcast_to(d['A'], (m, m)).T - np.broadcast_to(d['B'], (m, m)), columns=cols))
说明:将每个系列广播到一个3x3矩阵中并减去它们,使其成为一个数据帧,并将其连接到原始数据帧。列是自动生成的。

这可能会有所帮助:
1.根据数据帧的长度复制列A
2.将B转换为numpy数组
3.从A中减去B,这将得到每行的u减法
4.concat返回主数据

temp = pd.concat([df.A]*len(df), axis=1).sub(df.B.to_numpy())
final = pd.concat([df,temp], axis=1).set_axis(['A','B','C','D','E'],axis='columns')
final

    A   B   C   D   E
0   5   3   2   3   4
1   3   2   0   1   2
2   8   1   5   6   7

哦,太好了!我不知道那里的情况。另一个学习点。Thanks我认为写np.newaxis而不是none会更清晰,即使“(np.newaxis是none)==True”