如何基于列表字典列的status值过滤Pandas DataFrame
过滤包含指定status的DataFrame行
要实现仅保留colexample列中存在status为sent或other的行,可以通过以下方式完成:
核心代码
filtered_df = df[df['colexample'].apply(lambda lst: any(d['status'] in {'sent', 'other'} for d in lst))]
代码说明
df['colexample'].apply(...):遍历colexample列的每一个字典列表元素any(d['status'] in {'sent', 'other'} for d in lst):检查当前列表中是否存在至少一个字典的status属于目标集合,只要满足一个就返回True- 最终通过布尔索引筛选出所有符合条件的行
示例验证
假设原DataFrame有两行数据:
import pandas as pd import datetime data = [ { 'colexample': [ {'status': 'married', 'date': datetime.datetime(2022, 10, 1, 6, 27, 31, 118000)}, {'status': 'divorced', 'date': datetime.datetime(2022, 10, 1, 6, 27, 52, 47000)}, {'status': 'sent', 'date': datetime.datetime(2022, 10, 1, 6, 27, 52, 47000)}, {'status': 'other', 'date': datetime.datetime(2022, 10, 1, 6, 27, 52, 47000)} ] }, { 'colexample': [ {'status': 'married', 'date': datetime.datetime(2022, 10, 2, 6, 27, 31)}, {'status': 'divorced', 'date': datetime.datetime(2022, 10, 2, 6, 27, 52)} ] } ] df = pd.DataFrame(data) filtered_df = df[df['colexample'].apply(lambda lst: any(d['status'] in {'sent', 'other'} for d in lst))] print(filtered_df)
运行后只会保留第一行数据,符合需求。
内容的提问来源于stack exchange,提问作者vando
相关产品推荐
相关产品推荐

