如何筛选DataFrame中不在两个指定列表内的Token数据?
筛选DataFrame中不在指定列表的元素
原始数据
给定的DataFrame:
import pandas as pd df = pd.DataFrame({'all_tokens': ['BTC', 'WETH', 'SOL', 'sBTC', 'sWETH', 'sSOL', 'AVAX', 'LTC', 'ETC'], 'amount': [10, 20, 30, 40, 50, 60, 70, 80, 90]})
原始数据输出:
all_tokens amount 0 BTC 10 1 WETH 20 2 SOL 30 3 sBTC 40 4 sWETH 50 5 sSOL 60 6 AVAX 70 7 LTC 80 8 ETC 90
需要排除的两个token列表:
base_tokens = ['BTC', 'WETH', 'SOL'] other_tokens = ['sBTC', 'sWETH', 'sSOL']
预期输出的new_df:
new_tokens 0 AVAX 1 LTC 2 ETC
问题分析
尝试的代码未得到正确结果,反而包含了所有需要排除的token:
new_df = pd.DataFrame({'new_tokens': df['all_tokens'].loc[(~df['all_tokens'].isin(base_tokens)) & (~df['all_tokens'].isin(other_tokens))]})
注:代码中的&是HTML转义字符,实际Python中应使用&,但即便修正后,这种分两次判断的写法不仅冗余,也容易因逻辑细节出错。
正确解法
将两个需要排除的列表合并,通过一次isin判断取反,就能高效筛选出目标数据:
# 合并需要排除的token列表 exclude_tokens = base_tokens + other_tokens # 筛选不在排除列表中的token,构造新DataFrame并重置索引 new_df = pd.DataFrame({ 'new_tokens': df.loc[~df['all_tokens'].isin(exclude_tokens), 'all_tokens'] }).reset_index(drop=True)
运行后即可得到与预期完全一致的结果。
内容的提问来源于stack exchange,提问作者Luiz Scheuer
相关产品推荐
相关产品推荐

