Pandas遍历DataFrame筛选值大于4的行并生成新列求助
解决Pandas遍历DataFrame筛选值大于4的行并生成新列的问题
原代码的问题分析
你的代码存在几个关键错误:
- 遍历列值时仅获取了数值,没有拿到对应的行索引,需用
items()方法同时获取索引和值 df(row).index是错误语法,无法正确获取行索引append方法仅能接收一个参数,你传入两个参数会触发报错
修正后的代码示例
先假设你的DataFrame示例如下:
import pandas as pd # 示例DataFrame data = {'A': [1,5,3,6], 'B': [2,4,5,7], 'C': [8,2,3,1]} df = pd.DataFrame(data)
修正后的遍历代码会收集所有值大于4的行索引和对应列名:
result_list = [] # 遍历每一列 for col in df.columns: # 遍历列内元素,同时获取行索引和对应值 for idx, value in df[col].items(): if value > 4: # 将行索引和列名以元组形式加入列表 result_list.append( (idx, col) ) # 将结果转换为DataFrame,方便后续处理 result_df = pd.DataFrame(result_list, columns=['行ID', '列名']) print(result_df)
直接在原DataFrame生成新列(标记满足条件的列名)
如果想在原DataFrame中新增一列,记录该行所有值大于4的列名(用逗号分隔),可以这样实现:
def get_matched_cols(row): # 筛选该行中值大于4的列名,并用逗号连接 return ','.join([col for col in df.columns if row[col] > 4]) # 生成新列 df['满足条件的列名'] = df.apply(get_matched_cols, axis=1) print(df)
运行后示例输出:
A B C 满足条件的列名 0 1 2 8 C 1 5 4 2 A 2 3 5 3 B 3 6 7 1 A,B
内容的提问来源于stack exchange,提问作者Jose
相关产品推荐
相关产品推荐

