如何筛选DataFrame:排除item为A且price大于1000的行
问题描述
我有如下DataFrame:
import pandas as pd df = pd.DataFrame( {'tid': [11, 12, 12, 14, 14], 'price': [846.94,412.65,1295.38,741.24,695.47], 'item': ['A', 'B', 'A', 'B', 'A']} )
输出的df内容:
tid price item 0 11 846.94 A 1 12 412.65 B 2 12 1295.38 A 3 14 741.24 B 4 14 695.47 A
我需要保留所有行,仅排除item列值为A且price列值大于1000的行,预期结果如下:
tid price item 0 11 846.94 A 1 12 412.65 B 3 14 741.24 B 4 14 695.47 A
解决方案
可以通过布尔索引实现需求,以下两种方法都能达到目标:
方法1:取反排除条件
先构造需要排除的行的条件,再通过取反操作筛选保留的行:
# 定义要排除的条件:item为A 且 price大于1000 exclude_condition = (df['item'] == 'A') & (df['price'] > 1000) # 取反筛选,保留不符合排除条件的所有行 result_df = df[~exclude_condition]
方法2:直接定义保留条件
直接写出符合保留要求的逻辑(满足任一条件即可保留):
- item列值不为A,或者
- item列值为A但price列值不大于1000
代码实现:
keep_condition = (df['item'] != 'A') | (df['price'] <= 1000) result_df = df[keep_condition]
两种方法执行后,result_df都会得到你想要的预期结果。
内容的提问来源于stack exchange,提问作者planar
相关产品推荐
相关产品推荐

