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

Pandas DataFrame满足双条件时向指定列填充值失败问题咨询

问题修复方案

错误原因

你写的代码存在3个核心问题:

  • 调用apply时是对Selected列做逐元素处理,lambda表达式内调用的df['Name']、df['Age']是全列对象,无法拿到当前行的对应值
  • .any()方法返回的是布尔值(判断整个序列是否存在真值),用布尔值和'Tom'、数值25做比较永远不成立,所以所有行都走else分支返回空字符串
  • Age列存储的是字符串类型,直接和数值25做比较逻辑不成立,需要先转为数值类型

最优实现(pandas推荐向量化操作,性能远高于apply)

代码如下:

import pandas as pd

data = {'Name': ['Tom', 'Joseph', 'Krish', 'John'],
        'Age': ['20', '35', '43', '50'],
        'Selected': ' '}

df = pd.DataFrame(data)

# 转换Age列为整数类型
df['Age'] = df['Age'].astype(int)
# 构造匹配条件
match_mask = (df['Name'] == 'Tom') & (df['Age'] < 25)
# 符合条件的行填充对应Name值,其余填充空字符串
df.loc[match_mask, 'Selected'] = df.loc[match_mask, 'Name']
df.loc[~match_mask, 'Selected'] = ''

print(df)

运行后输出结果:

Name  Age Selected
0     Tom   20      Tom
1  Joseph   35         
2   Krish   43         
3    John   50         

可选:行级apply实现

如果要使用apply语法,需要设置按行遍历(axis=1),直接取当前行的字段做判断:

df['Age'] = df['Age'].astype(int)
df['Selected'] = df.apply(lambda row: row['Name'] if row['Name'] == 'Tom' and row['Age'] < 25 else '', axis=1)

内容的提问来源于stack exchange,提问作者user01

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:00:03