You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于嵌套字典列表的Pandas布尔条件判断技术问询

问题描述

我的Pandas数据框包含一列名为info,该列存储嵌套字典列表,示例如下:

[{'id': 123,
  'type': 'salary', # 父节点
  'tx': 'house',
  'sector': 'EU',
  'transition': [{'id': 'hash', # 子节点
    'id': 123,
    'type': 'salary',
    'tx': 'house' }]},
 {'userid': 123,
  'type': 'salary', # 父节点
  'tx': 'office',
  'transition': [{'id': 'hash', # 子节点
    'id': 123,
    'type': 'salary',
    'tx': 'office'}]}]

需要判断该列表是否同时满足以下两个条件:

  • 父节点中存在多个type等于'salary'的项
  • 所有type等于'salary'的父节点中,tx字段的值存在不同的情况

我尝试过扁平化列表过滤的方法,但未实现需求,尝试的代码如下:

a = df.iloc[0].info
values = [item for sublist in [[list(i.values()) for i in a]][0]for item in sublist] 
解决方案

无需扁平化整个列表,直接针对父节点提取关键信息即可实现判断:

单条数据判断逻辑

先从info列表中筛选出父节点里type == 'salary'的项,再分别验证两个条件:

# 取单条数据示例
info_list = df.iloc[0]['info']

# 筛选父节点中type为salary的项
salary_parents = [item for item in info_list if item.get('type') == 'salary']

# 条件1:salary类型的父节点数量大于1
condition1 = len(salary_parents) > 1
# 条件2:tx值存在差异(集合去重后数量大于1)
condition2 = len({parent['tx'] for parent in salary_parents}) > 1

# 最终布尔结果
result = condition1 and condition2

整列数据批量判断

如果要对DataFrame每一行都执行该判断,可封装函数后用apply批量处理:

def check_salary_conditions(info_list):
    salary_parents = [item for item in info_list if item.get('type') == 'salary']
    # 先判断条件1,不满足直接返回False,减少计算
    if len(salary_parents) <= 1:
        return False
    # 验证条件2
    return len({parent['tx'] for parent in salary_parents}) > 1

# 生成新列存储每行的判断结果
df['meets_conditions'] = df['info'].apply(check_salary_conditions)

代码说明

  • 用item.get('type')替代直接索引,避免因父节点缺少type字段抛出异常
  • 利用集合自动去重的特性,快速判断tx值是否存在差异,效率高于逐一遍历对比
  • 优先判断条件1,不满足时直接返回结果,减少不必要的计算开销

内容的提问来源于stack exchange,提问作者vando

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 13:00:46