如何过滤DataFrame中不在多个DataFrame列表中的行?
改写方案
核心思路
把所有需要排除的path列合并成一个统一序列,再一次性判断索引是否在该序列中,就能用列表批量处理任意数量的DataFrame,彻底摆脱硬编码。
具体代码
- 定义包含目标DataFrame的列表(可按需添加更多):
dfs_to_exclude = [df2, df3]
- 合并所有列表中DataFrame的
path列:
import pandas as pd all_excluded_paths = pd.concat([df['path'] for df in dfs_to_exclude], ignore_index=True)
- 过滤原DataFrame:
df = df[~df.index.isin(all_excluded_paths)]
简化写法(一步到位)
如果不需要保留中间变量,可以直接合并成一行:
dfs_to_exclude = [df2, df3] df = df[~df.index.isin(pd.concat([d['path'] for d in dfs_to_exclude], ignore_index=True))]
说明
这种写法和原代码逻辑完全一致:排除所有索引出现在任意一个目标DataFrame的path列中的行。后续要添加更多需要排除的DataFrame,只需往dfs_to_exclude列表里追加即可,无需修改过滤逻辑。
内容的提问来源于stack exchange,提问作者simpatico
相关产品推荐
相关产品推荐

