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

时间:2017-10-03 01:23:27

标签: python pandas dataframe subtraction

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中两个数据框的示例。

我希望amount减去product_namesa产品类似,amount 0和b产品的数量也为0 ... product_name列值。

你的时间

3 个答案:

答案 0 :(得分:3)

选项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

答案 1 :(得分:1)

假设你有

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()和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

问题与subtracting two dataframes

非常相似

答案 2 :(得分:0)

你也可以合并然后做减法

|