pandas DataFrame中按行筛选列表元素及顺序完全相同的行
错误原因
你现有代码的逻辑是将每行的lst值和自身比较,结果必然全为True,所以会返回全部行,和筛选目标不符。pandas无法直接对列内存储的列表做等值判断,需要先转成可比较的元组类型再做筛选。
解决方案
场景1:筛选lst等于指定目标列表的行
如果你要匹配的目标是固定列表['GG','PP', 'DD'],用如下代码即可实现预期效果:
import pandas as pd d = {'id':[1,2,3], 'lst' : [['GG','PP', 'DD'],['DD','PP', 'GG'], ['GG','PP', 'DD']]} dd = pd.DataFrame(d) # 定义目标列表,转成元组用于比较 target = tuple(['GG','PP', 'DD']) # 将lst列的所有列表转成元组后和目标比较 result = dd[dd['lst'].apply(tuple) == target] print(result)
运行后输出:
id lst 0 1 [GG, PP, DD] 2 3 [GG, PP, DD]
场景2:筛选所有存在重复的列表行
如果你需要的不是匹配固定列表,而是保留所有出现次数≥2的列表对应的行,可先统计频次再筛选:
# 统计每个列表的出现次数 lst_count = dd['lst'].apply(tuple).value_counts() # 筛选出出现次数≥2的列表 duplicate_lst = lst_count[lst_count >= 2].index # 过滤出对应行 result = dd[dd['lst'].apply(tuple).isin(duplicate_lst)]
内容的提问来源于stack exchange,提问作者Unicorn07
相关产品推荐
相关产品推荐

