Python Pandas:字典中UPS_HEAD/UPS_DRV<95时提取q_start值
Pandas筛选需求实现
需求说明
当DataFrame的summary字段(字典类型)中,UPS_HEAD或UPS_DRV的数值小于95时,提取对应行的q_start列值。
原始DataFrame定义
import pandas as pd rows_list = [ {'q_end': '2022-06-24 15:00:00', 'q_start': '2022-06-24 15:59:59', 'summary': {'UPS_HEAD': 84, 'UPS_DRV': 84, 'ALLOW_AP': 18 }}, {'q_end': '2022-06-24 14:00:00', 'q_start': '2022-06-24 14:59:59', 'summary': {'UPS_HEAD': 95, 'UPS_DRV': 95, 'ALLOW_AP': 18 }}, {'q_end': '2022-06-24 13:00:00', 'q_start': '2022-06-24 13:59:59', 'summary': {'UPS_HEAD': 91, 'UPS_DRV': 91, 'ALLOW_AP': 18 }} ] df = pd.DataFrame(rows_list)
期望输出(注:原描述的输出为q_end值,若按需求提取q_start则结果如下)
output = ['2022-06-24 15:59:59', '2022-06-24 13:59:59']
实现方法
方法1:行级lambda判断
通过apply快速遍历每行的summary字典,直接筛选符合条件的行并提取目标列:
output = df[df['summary'].apply(lambda x: x['UPS_HEAD'] < 95 or x['UPS_DRV'] < 95)]['q_start'].tolist()
方法2:展开字典字段后筛选
将summary字典展开为独立列,再用常规的DataFrame条件筛选,适合需复用字典内字段的场景:
# 展开summary字典为单独列 summary_cols = df['summary'].apply(pd.Series) # 合并后筛选 merged_df = pd.concat([df, summary_cols], axis=1) output = merged_df[(merged_df['UPS_HEAD'] < 95) | (merged_df['UPS_DRV'] < 95)]['q_start'].tolist()
内容的提问来源于stack exchange,提问作者spider
相关产品推荐
相关产品推荐

