如何基于条件将pandas DataFrame指定列的值写入另一列
代码问题修正
你的原有代码存在三处可优化/错误点:
- 列名拼写错误:
Costomer应为Customer np.select第二个参数要求传入和条件列表长度匹配的取值列表,直接传入Series会触发参数格式错误- 原逻辑中
default=''会将Call Ref为Enterprise/Client的行值覆盖为空,不符合保留原值的需求
修正后的np.select实现
import numpy as np df_OCB['Call Ref'] = np.select( condlist = [~df_OCB['Call Ref'].isin(['Enterprise', 'Client'])], choicelist = [df_OCB['Customer']], default = df_OCB['Call Ref'] )
注:这里用isin替代多条件逻辑与判断,写法更简洁。
更易读的Pandas原生实现(无需引入numpy)
# 生成需要替换的行掩码 replace_mask = ~df_OCB['Call Ref'].isin(['Enterprise', 'Client']) # 定位目标行直接赋值 df_OCB.loc[replace_mask, 'Call Ref'] = df_OCB.loc[replace_mask, 'Customer']
该写法逻辑更直观,运行效率也优于np.select的单条件场景。
内容的提问来源于stack exchange,提问作者Juan Rodrigues
相关产品推荐
相关产品推荐

