根据相应的值替换值,但如果不满足条件则保留值

Replace value based on a corresponding value but keep value if criteria not met

给定以下数据框,

输入 df:

Cost_centre Pool_costs
90272 A
92705 A
98754 A
91350 A

在给定 Cost_centre 值的情况下,将 Pool_costs 值替换为 'B',但如果 Cost_centre 值未出现在列表中,则保留 Pool_costs 值。

输出 df:

Cost_centre Pool_costs
90272 B
92705 A
98754 A
91350 B

当前代码:

此代码一直运行到 lambda 的 else 端;再次找到 Pool_costs 值是困难的部分。

df = pd.DataFrame({'Cost_centre': [90272, 92705, 98754, 91350],
                   'Pool_costs': ['A', 'A', 'A', 'A']})

pool_cc = ([90272,91350])

pool_cc_set = set(pool_cc)

df['Pool_costs'] = df['Cost_centre'].apply(lambda x: 'B' if x in pool_cc_set else df['Pool_costs'])
print (df)

我使用了以下内容并取得了成功,但是当有很多 cost_centre 需要更改时,很难阅读和修改。

df = pd.DataFrame({'Cost_centre': [90272, 92705, 98754, 91350],
                   'Pool_costs': ['A', 'A', 'A', 'A']})

filt = df['Cost_centre'] == '90272'|df['Cost_centre'] == '91350')
df.loc[filt, 'Pool_costs'] = 'B'

IIUC,可以用isin

filt = df['Cost_centre'].isin([90272, 91350])
df.loc[filt, 'Pool_costs'] = 'B'
print(df)

   Cost_centre Pool_costs
0        90272          B
1        92705          A
2        98754          A
3        91350          B