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

使用Lambda函数处理Pandas DataFrame条件赋值时的报错问题求助

问题分析与解决

错误原因

你写的代码报错是因为**df['b'].apply()的lambda参数x是b列的单个数值**,它没有a属性——你试图从一个整数里获取a列的值,这显然行不通。

正确实现方式

方法1:逐行处理(apply+axis=1)

把apply作用于整个DataFrame,指定axis=1让lambda接收整行数据,这样就能同时访问a和b列的值:

import pandas as pd
import random

df = pd.DataFrame({'a': ['Yes', 'No', 'Yes','Yes'], 'b': [1, 0, 0,0]})
# 对整行应用逻辑,替换符合条件的b值
df['b'] = df.apply(lambda row: random.randint(1,15) if row['a'] == 'Yes' and row['b'] == 0 else row['b'], axis=1)
print(df)

方法2:布尔索引批量处理(推荐)

用布尔索引筛选出需要替换的行,直接批量赋值随机数,这种方法比逐行apply效率更高,适合大数据集:

import pandas as pd
import random

df = pd.DataFrame({'a': ['Yes', 'No', 'Yes','Yes'], 'b': [1, 0, 0,0]})
# 生成筛选条件:a为Yes且b为0
mask = (df['a'] == 'Yes') & (df['b'] == 0)
# 给符合条件的行的b列赋值1-15的随机整数
df.loc[mask, 'b'] = [random.randint(1,15) for _ in range(df[mask].shape[0])]
print(df)

输出示例

运行后会得到符合期望的结果(随机数每次运行不同):

a   b
0  Yes   1
1   No   0
2  Yes  12
3  Yes   5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:07:41