如何在Pandas中应用多个行条件且不覆盖之前条件的计算结果
错误原因
你之前的写法每次对整个New列赋值,仅满足过滤条件的行会保留计算结果,其余行自动填充为NaN,后续赋值操作会直接覆盖整列数据,因此之前行的计算结果会被清空。
解决方法
方法1:用loc逐条件赋值(可读性最高)
先提前拆分Cond列避免重复计算,再用loc仅给符合条件的行赋值,不会覆盖其他行的结果:
# 提前拆分Cond列,得到拆分后的所有分段 split_df = df['Cond'].str.split('_', expand=True) # 逐条件给对应行的New列赋值 df.loc[df['Samp'] == 'Org', 'New'] = split_df[0] df.loc[df['Samp'] == 'Sea', 'New'] = split_df[0] df.loc[df['Samp'] == 'Paid', 'New'] = split_df[2]
方法2:用np.select批量处理多条件(适合条件数量多的场景)
import numpy as np split_df = df['Cond'].str.split('_', expand=True) # 定义条件列表和对应返回值列表,顺序一一对应 conditions = [ df['Samp'].isin(['Org', 'Sea']), df['Samp'] == 'Paid' ] values = [ split_df[0], split_df[2] ] # 按条件匹配赋值,default参数可指定所有条件都不满足时的默认值 df['New'] = np.select(conditions, values, default=np.nan)
两种方法都可以得到你预期的输出结果。
内容的提问来源于stack exchange,提问作者s_khan92
相关产品推荐
相关产品推荐

