如何基于列表格式的tokens和labels列筛选Pandas DataFrame
Pandas 列表类型列的筛选方法
你的原代码失效原因是:直接用==会判断整个列表完全等于目标列表,而不是判断列表是否包含指定元素。要筛选包含多个指定元素的列表列,需要结合apply和all()来实现:
正确代码实现
import pandas as pd df = pd.DataFrame({'text': ["Hi how","I am fine","Ila say Hi"], 'tokens':[['Hi','how'],['I','am','fine'],['Ila','say','Hi']], 'labels':[['A','B'],['C','B','A'],['D','B','A']]}) # 同时满足两个筛选条件 filter_condition = ( df['tokens'].apply(lambda lst: all(x in lst for x in ['Hi', 'Ila'])) & df['labels'].apply(lambda lst: all(x in lst for x in ['A', 'D'])) ) # 筛选结果 result_df = df[filter_condition] print(result_df)
输出结果
text tokens labels 2 Ila say Hi [Ila, say, Hi] [D, B, A]
原理说明
apply(lambda lst: all(x in lst for x in [目标元素列表])):遍历每一行的列表,用all()判断所有目标元素都存在于当前列表中- 这种写法兼容列表包含单个或多个元素的场景,只要目标元素全部在列表内就会被选中
内容的提问来源于stack exchange,提问作者The Great
相关产品推荐
相关产品推荐

