python - 如何用另一列中的每个值减去一个列值( Pandas )

标签 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 的数组 broadcasting :

df = pd.DataFrame({'A':[5, 3, 8],
                   'B':[3, 2, 1]})

df2 = pd.DataFrame(df['A'].values[:, None] - df['B'].values, columns=['C', 'D', 'E'])

df = df.join(df2)

结果:

   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“拉伸(stretch)”df['A'].values[:, None] 到:

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

df['B'].values 到:

array([[3, 2, 1],
       [3, 2, 1],
       [3, 2, 1]])

减法的结果是:

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

关于python - 如何用另一列中的每个值减去一个列值( Pandas ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60652215/

相关文章:

python - 同一个 Python 模块的两个实例?

python - 根据数据框中的条件对值进行排序

python - 为什么 numpy.random.Generator.choice 与默认均匀分布相比,给定均匀分布提供不同的结果(种子)?

python - 我如何将这个 (100, 100) numpy 数组转换为 pygame 中的灰度 Sprite ?

python - 只有在多维数组的 Python 中值大于零时才添加值

python - 什么是 numpy 方法 int0?

python - Keras - 管理历史

python - 将数据帧转换为 csv 时删除行

python - 根据分隔符拆分字符串列并将其转换为 Pandas 中的字典,无需循环

string - 仅过滤包含行的字符串的 pandas 列