Pandas 1.1.5 如何提取所有行数值均大于0的列
实现方案
核心思路
对数据框的每一列逐列判断:如果该列所有行的数值都严格大于0,则保留该列,否则剔除。
代码实现
首先导入pandas并构造示例数据框(如果已经有df1可以跳过构造步骤):
import pandas as pd # 构造示例数据框,实际使用时替换为你自己的df1即可 df1 = pd.DataFrame({ 'Revenue': [0, 500, 200], 'Profit': [300, 900, 100], 'Sales': [1, 3, 4] })
如果你的数据框存在非数值列,可以先加一行代码只保留数值列,避免后续判断报错:
# 可选步骤 df1 = df1.select_dtypes(include='number')
核心筛选代码:
# 筛选所有行均大于0的列 result_df = df1.loc[:, df1.gt(0).all(axis=0)]
代码说明
df1.gt(0):将数据框中每个元素与0比较,大于0返回True,否则返回False,得到和原数据框结构完全一致的布尔型数据框.all(axis=0):axis=0代表按列做聚合判断,只有该列所有值都为True时才返回True,最终得到一个索引为列名、值为布尔类型的序列df1.loc[:, 布尔序列]:保留所有行,仅保留布尔序列中值为True对应的列
该写法完全兼容你使用的pandas 1.1.5版本,运行后得到的result_df就是要求的输出结果。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

