如何在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']}
存在两个核心问题:
test_df['B'].items()遍历的是DataFrame的列索引与对应Series对象,并非每个字典内部的键值对;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
相关产品推荐
相关产品推荐

