根据另一列中的值从一列中减去

Subtracting from one column based on values in another column

df_1

product_name  amount   price
     a           1        1
     b           2        2
     c           3        3
     d           4        4

df_2
product_name  amount
     a           1    
     b           2 

这是 pandas.

中两个数据帧的样本

我想用 product_names 减去 amounta 产品将是 amount 0 和 b 产品也是数量 0... 具有 product_name 列值。

谢谢你的时间

假设你有

df_1

product_name | amount | price
     a           1        1
     b           2        2
     c           3        3
     d           4        4

df_2

product_name | amount
     a           1    
     b           2 

您可以使用 set_index 将 product_name 设置为 df_1 和 df_2 的索引,然后使用 subtract() with fill_value = 0 来保留两个数据框中不存在的任何值。

df_1.set_index('product_name').subtract(df_2.set_index('product_name'), fill_value=0).reset_index()

上面的代码产生

product_name  | amount | price
     a           0.0      1.0
     b           0.0      2.0
     c           3.0      3.0
     d           4.0      4.0

问题与

非常相似

选项 1
使用 df.isin:

充分利用您的数据
mask = a.product_name.isin(b.product_name)
a.loc[mask, 'amount'] = 0

a
  product_name  amount  price
0            a       0      1
1            b       0      2
2            c       3      3
3            d       4      4

选项 2
set_index + reindex + subtract。稍微更健壮,不设置为 0:

b = b.set_index('product_name').reindex(a.product_name).fillna(0)
a.amount -= b.amount.values

a
  product_name  amount  price
0            a     0.0      1
1            b     0.0      2
2            c     3.0      3
3            d     4.0      4

也可以先合并再做减法

df = df1.merge(df2,how='left',on='product_name',suffixes=('','R'))
df.amount = df.amount - df.amountR.fillna(0)

  product_name  amount  price  amountR
0            a     0.0      1      1.0
1            b     0.0      2      2.0
2            c     3.0      3      NaN
3            d     4.0      4      NaN