如何基于多条件筛选DataFrame,移除指定行并保留其余数据
多条件筛选DataFrame行的解决方案
核心思路
你需要保留不满足「media等于IO+Glc+CasA+Fe_gfp 且 id为1或2」的所有行,用布尔索引或query()方法都能快速实现。
方法1:布尔索引直接筛选
用~对移除条件取反,排除目标行:
import pandas as pd # 先构造你的示例DataFrame(如果已有df可跳过此步) data = { 'time': [0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72], 'media': ['IO+Glc+CasA_gfp', 'IO+Glc+CasA_gfp', 'IO+Glc+CasA_gfp', 'IO+Glc+CasA+Fe_gfp', 'IO+Glc+CasA+Fe_gfp', 'IO+Glc+CasA+Fe_gfp', 'IO+Glc+CasA_gfp', 'IO+Glc+CasA_gfp', 'IO+Glc+CasA_gfp', 'IO+Glc+CasA+Fe_gfp', 'IO+Glc+CasA+Fe_gfp', 'IO+Glc+CasA+Fe_gfp'], 'id': [1,2,3,1,2,3,1,2,3,1,2,3], 'od': [0.00, -0.07, 0.02, 0.01, 0.01, 0.02, -0.02, -0.01, 0.01, 0.14, 0.11, 0.02], 'gfp': [81, -19, -95, 123, -17, -40, 128, -20, -77, 15, -12, 15] } df = pd.DataFrame(data, index=[37,38,39,43,44,45,85,86,87,91,92,93]) # 筛选逻辑:保留 不是(media为目标值且id在1、2中) 的行 filtered_df = df[~((df['media'] == 'IO+Glc+CasA+Fe_gfp') & (df['id'].isin([1,2])))]
方法2:query()简洁语法
用类SQL的语法实现,代码更直观:
filtered_df = df.query("not (media == 'IO+Glc+CasA+Fe_gfp' and id in [1,2])")
验证结果
打印filtered_df即可确认结果:
print(filtered_df)
输出符合预期:
time media id od gfp 37 0.24 IO+Glc+CasA_gfp 1 0.00 81 38 0.24 IO+Glc+CasA_gfp 2 -0.07 -19 39 0.24 IO+Glc+CasA_gfp 3 0.02 -95 45 0.24 IO+Glc+CasA+Fe_gfp 3 0.02 -40 85 0.72 IO+Glc+CasA_gfp 1 -0.02 128 86 0.72 IO+Glc+CasA_gfp 2 -0.01 -20 87 0.72 IO+Glc+CasA_gfp 3 0.01 -77 93 0.72 IO+Glc+CasA+Fe_gfp 3 0.02 15
内容的提问来源于stack exchange,提问作者Salt_Industry
相关产品推荐
相关产品推荐

