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_names
与a
产品类似,amount
0和b
产品的数量也为0 ... product_name
列值。
你的时间
答案 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
非常相似
答案 2 :(得分:0)
你也可以合并然后做减法
|