基于行内数值创建Pandas新列的实现及报错解决
解决Pandas新增列的KeyError问题并实现需求
错误原因分析
你写的代码报错是因为两个核心问题:
- axis参数方向错误:
apply指定axis=0是按列处理数据,此时lambda里的x是单列的Series,索引是行号而非列名,用x[cols]会找不到对应索引,触发KeyError。 - 行逻辑判断失误:需求是判断每行中任意
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
相关产品推荐
相关产品推荐

