如何在Pandas DataFrame中为至少一列超阈值的行打标签?
问题解决
错误原因
当你使用df.apply(..., axis=1)时,传入函数flag_df_new的参数是DataFrame的单行数据(Series对象),而非整个DataFrame。Series没有columns属性,因此会抛出AttributeError: 'Series' object has no attribute 'columns'。
解决方案
方法1:矢量化操作(推荐,效率更高)
直接对目标列进行批量判断,无需使用apply:
# 指定需要判断的列 target_columns = ['Value_1', 'Value 2', 'Value 3'] # 对每行判断是否有值>10,再转为整数类型(True→1,False→0) customer_summary_1['Column_tag'] = (customer_summary_1[target_columns] > 10).any(axis=1).astype(int)
方法2:修改apply函数
如果一定要用apply,调整函数逻辑直接处理传入的Series:
def flag_df_new(row): # 检查当前行的目标列是否有大于10的值 if row[['Value_1', 'Value 2', 'Value 3']].gt(10).any(): return 1 return 0 customer_summary_1['Column_tag'] = customer_summary_1.apply(flag_df_new, axis=1)
验证结果
执行上述任意一种方法后,DataFrame会生成期望的Column_tag列:
| Unique ID | Value_1 | Value 2 | Value 3 | Column_tag |
|---|---|---|---|---|
| 111 | 10 | 50 | 18 | 1 |
| 222 | 5 | 8 | 2 | 0 |
| 333 | 12 | 3 | 5 | 1 |
内容的提问来源于stack exchange,提问作者Chinthana
相关产品推荐
相关产品推荐

