如何获取Pandas DataFrame中所有参数值均小于0.05的首行ID
问题解决:Pandas筛选首次满足多列全部小于阈值的行ID
错误原因
你原有代码的核心问题是:仅对P1-P4每个单元格单独做是否小于0.05的判断,得到的是和P列同维度的布尔矩阵,无法直接用来筛选整行。行筛选需要的是一维布尔序列,标识该行所有P列是否都满足小于0.05的条件。
正确实现代码
import pandas as pd df = pd.DataFrame({"ID": [1,2,3,4,5,6], "P1": [0.50,0.20,0.10,0.08,0.04,0.03], "P2": [0.06,0.05,0.05,0.04,0.04,0.04], "P3": [0.20,0.15,0.10,0.06,0.04,0.02], "P4": [0.01,0.01,0.01,0.01,0.01,0.01]}) # 逐行判断所有P列是否都小于0.05,取第一个符合条件的ID first_qualified_id = df[df[['P1','P2','P3','P4']].lt(0.05).all(axis=1)]['ID'].iloc[0] print(first_qualified_id)
运行输出为5,符合预期。
关键逻辑说明
.lt(0.05):pandas逐元素判断小于0.05的方法,等价于< 0.05写法.all(axis=1):指定按行维度做逻辑与判断,只有某行所有P列的判断结果都为True时,该行最终返回True,得到行筛选需要的一维布尔序列.iloc[0]:取筛选结果的第一行数据,也就是首次满足条件的记录
内容的提问来源于stack exchange,提问作者Matthi9000
相关产品推荐
相关产品推荐

