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

如何在Pandas DataFrame中用字典推导式匹配对应列的字典项?

解决DataFrame中按列值筛选字典键值对的问题

可行解决方案

方法1:使用apply逐行处理

通过apply指定axis=1逐行遍历DataFrame,每行提取A列的字符串作为键,从B列的字典中取出对应键值对,构造新字典:

import pandas as pd

# 构造样例数据
df = pd.DataFrame({
    'A': ['a', 'c', 'a', 'd'],
    'B': [{'a': '2', 'b': '5'}, {'a': '2', 'b': '16', 'c': '32'}, {'a': '6', 'd': '23'}, {'b': '4', 'd': '76'}]
})

# 处理逻辑
df['B'] = df.apply(lambda row: {row['A']: row['B'].get(row['A'])}, axis=1)

方法2:使用列表推导式(性能更优)

对于大数据量场景,列表推导式的执行效率通常高于apply,可以直接通过zip配对A列和B列的元素,逐行生成筛选后的字典:

df['B'] = [{a: b.get(a)} for a, b in zip(df['A'], df['B'])]

原代码报错原因分析

你之前尝试的代码:

Test_df['B'] = {k: v for k, v in test_df['B'].items() if k == test_df['A']}

存在两个核心问题:

  1. test_df['B'].items()遍历的是DataFrame的列索引与对应Series对象,并非每个字典内部的键值对;
  2. test_df['A']是一个Series对象,直接用单个键k与整个Series比较会产生布尔值歧义,触发ValueError: The truth value of a Series is ambiguous。

验证结果

执行上述任一方法后,输出结果与期望一致:

A          B
0  a  {'a': '2'}
1  c  {'c': '32'}
2  a  {'a': '6'}
3  d  {'d': '76'}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:22:29