根据另一列中的值从一列中减去
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
减去 amount
像 a
产品将是 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
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
减去 amount
像 a
产品将是 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