You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 05:03:03