在多个地方执行多项操作

问题描述 投票:0回答:1

我有两个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'])

enter image description here

但是,我希望两个数据框都更新,在这种情况下,它们都将在S列中显示4。

pandas numpy
1个回答
0
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.