如何用Pandas筛选90%以上列值小于指定阈值的行?
实现90%以上列满足条件的行筛选
嘿,这问题很好解决!你已经知道用all(axis=1)来筛选所有列满足条件的行,现在要改成90%以上列满足,核心思路是统计每行满足条件的列数占总列数的比例,再和0.9比较就行。
具体步骤&代码示例
先回顾你的示例数据:
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randint(5, 15, (10, 11)), columns=list('abcdefghijk'))
假设你要筛选90%以上列的数值小于指定阈值(比如阈值设为10),可以这么写:
# 指定你的阈值 threshold = 10 # 1. 计算每行中数值小于阈值的列数占总列数的比例 # 2. 判断比例是否大于0.9(即90%以上) condition = (df < threshold).sum(axis=1) / df.shape[1] > 0.9 # 应用条件筛选行 filtered_df = df[condition]
代码解释
df < threshold:生成一个布尔型DataFrame,每个位置表示对应单元格是否小于阈值;.sum(axis=1):按行求和(True会被视为1,False视为0),得到每行满足条件的列数;/ df.shape[1]:除以总列数,得到每行满足条件的列数占比;> 0.9:判断该占比是否超过90%,得到一个布尔Series,用来筛选符合条件的行。
小补充
如果你需要的是**至少90%(包含90%)**的列满足条件,只需把> 0.9改成>= 0.9即可~
内容的提问来源于stack exchange,提问作者nilesh
相关产品推荐
相关产品推荐

