You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas删除名称含PP且值≤price的列?

解决方案

步骤拆解

要实现需求,核心是分两类筛选列:

  • 强制保留不含"PP"的列(price、highPrice、lowPrice)
  • 保留名称含"PP"但列值**不小于等于price**的列(示例中PP_5等于price也被保留,所以判断条件为>=)

代码实现

先构造示例DataFrame:

import pandas as pd

data = {
    'price': [1.1],
    'highPrice': [1.2],
    'lowPrice': [1.0],
    'PP_1': [0.1],
    'PP_2': [0.2],
    'PP_3': [0.3],
    'PP_4': [0.8],
    'PP_5': [1.1],
    'PP_6': [1.5],
    'PP_7': [2.2]
}
df = pd.DataFrame(data)

然后执行筛选:

# 1. 提取所有不含PP的列,强制保留
non_pp_cols = [col for col in df.columns if 'PP' not in col]

# 2. 提取所有含PP的列,筛选出值 >= price的列
pp_cols = [col for col in df.columns if 'PP' in col]
keep_pp_cols = [col for col in pp_cols if df[col].iloc[0] >= df['price'].iloc[0]]

# 3. 合并保留列,生成结果
keep_cols = non_pp_cols + keep_pp_cols
df_result = df[keep_cols]

输出结果

price  highPrice  lowPrice  PP_5  PP_6  PP_7
0    1.1        1.2       1.0   1.1   1.5   2.2

多行数据适配

如果你的DataFrame有多行,需要根据业务逻辑调整筛选条件:

  • 若要求该PP列所有行的值都 >= price才保留:
    keep_pp_cols = [col for col in pp_cols if (df[col] >= df['price']).all()]
    
  • 若要求该PP列至少有一行的值 >= price就保留:
    keep_pp_cols = [col for col in pp_cols if (df[col] >= df['price']).any()]
    

原代码问题说明

你之前写的df = df[df.filter <= df.price]存在两个问题:

  1. df.filter是DataFrame的方法,不是列对象,不能直接用来做比较
  2. 这种写法是筛选行,而你需要的是筛选列,所以要先确定要保留的列名列表,再用列表索引DataFrame

内容的提问来源于stack exchange,提问作者One boy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:45:35