Python 如何用另一列中的每个值减去一列值(熊猫)
我有两列A和B。我想用A列中的每个值减去B列的值,然后创建一个新列,而不使用for循环 下面是我的数据框架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
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”