如何在Pandas中筛选所有数值列均超阈值的行并保留标识列?
Pandas筛选所有数值列均高于阈值的行
- 核心思路:自动识别数值列,判断每行所有数值列是否都满足阈值条件,再筛选原表
- 解决代码(通用版,适配任意数量列):
import pandas as pd # 示例数据 data = { 'City': ['A', 'B', 'C', 'D'], 'Temp': [8, 12, 15, 11], 'Humidity': [9, 13, 14, 10], 'Pressure': [10, 11, 12, 9] } df = pd.DataFrame(data) threshold = 10 # 1. 自动筛选所有数值类型列,生成行级布尔掩码(每行所有数值列是否都>=阈值) mask = df.select_dtypes(include=['number']).ge(threshold).all(axis=1) # 2. 用掩码筛选原DataFrame,保留标识列和符合条件的行 filtered_df = df[mask]
- 关键说明:
select_dtypes(include=['number']):自动匹配所有int、float等数值列,无需手动指定列名或位置,适配109列的场景.ge(threshold):等价于>= threshold,写法更简洁.all(axis=1):按行判断所有数值列是否满足条件,这是你之前用.any(1)的核心区别——any是只要有一列满足就保留,all是必须所有列都满足才保留- 直接用
df.iloc[:,1:] >=10得到的是布尔矩阵,直接筛选会保留原表结构但不符合条件的单元格显示NaN,而用all(axis=1)转成单行布尔值才能正确过滤整行
内容的提问来源于stack exchange,提问作者Sudoh
相关产品推荐
相关产品推荐

