我有两个dataframe列,我想在其中检查一个元素是否在另一个元素内。我使用pandas isin
方法执行此操作。但是,如果元素存在于第二个数据帧中,我还想从这两个元素中减去:
attivo['S'] = np.where(attivo['SKU'].isin(stampate['SKU-S']), attivo['S'] - 1, attivo['S'])
在此示例中,如果S
数据帧的attivo
列中的一项出现在SKU-S
数据帧的stampate
列中,则S
列将减少一个单位,但是,我也希望S
数据框中的同一列stampate
减少。
如何做到这一点?
编辑示例数据:
df1 = pd.DataFrame({'SKU': 'productSKU', 'S': 5}, index=[0])
df2 = pd.DataFrame({'SKU-S': 'productSKU', 'S': 5}, index=[0])
当前,我正在实现:
df1['S'] = np.where(df1['SKU'].isin(df2['SKU-S']), df1['S'] - 1, df1['S'])
但是,我希望两个数据框都更新,在这种情况下,它们都将在S
列中显示4。
IIUC:
s = df1['SKU'].isin(df2['SKU-S'])
# modify df1
df1['S'] -= s
# count the SKU in df1 that belongs to df2 by values
counts = df1['SKU'].where(s).value_counts()
# modify df2
df2['S'] -= df2['SKU-S'].map(counts).fillna(0)