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

基于行内数值创建Pandas新列的实现及报错解决

解决Pandas新增列的KeyError问题并实现需求

错误原因分析

你写的代码报错是因为两个核心问题:

  1. axis参数方向错误:apply指定axis=0是按列处理数据,此时lambda里的x是单列的Series,索引是行号而非列名,用x[cols]会找不到对应索引,触发KeyError。
  2. 行逻辑判断失误:需求是判断每行中任意date_开头的列是否满足条件,必须按行处理(axis=1),且不需要用cols索引x——因为axis=1时x就是当前行的Series,索引就是cols里的列名。

正确实现代码

方法1:使用apply(适合小数据集)

先筛选目标列,再按行判断是否有任意列满足0-5的条件:

cols = [col for col in df.columns if 'date_' in col]
df['new_col'] = df[cols].apply(lambda x: "Yes" if ((x >= 0) & (x <= 5)).any() else "No", axis=1)

方法2:向量化操作(更高效,适合大数据集)

用Pandas的向量化判断替代apply,性能提升明显:

cols = [col for col in df.columns if 'date_' in col]
# 生成每行的满足条件的掩码矩阵
condition_mask = (df[cols] >= 0) & (df[cols] <= 5)
# 对掩码按行取任意满足项,并映射为Yes/No
df['new_col'] = condition_mask.any(axis=1).map({True: 'Yes', False: 'No'})

效果验证

假设你的DataFrame示例如下:

date_0  date_1  other_col
0       3       6          10
1      -1       2           5
2       7       8           3

运行代码后new_col结果为:

0    Yes
1    Yes
2     No

完全符合需求:只要行内任意date_列数值在0-5之间就标记Yes,否则标记No。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:40:31