如何将多值字典映射至Pandas DataFrame列?
单键多值字典与DataFrame列的映射实现
问题背景
我有一个单键对应多个值的字典,需要将其与DataFrame的列进行映射,实现将列中的值替换为字典中对应的键。
给定字典
Keys_nd_Values = {'ABCD': [223, 343, 432], 'ZXS': ['S23', 'GT4','98J']}
原始DataFrame数据
import pandas as pd df = pd.DataFrame({ 'A': [12525, 14654, 24798, 38945, 46456, 'AD545', 'A5D66'], 'B': ['1FWE23', 14654, 24798, 38945, 46485, 45346, 'A5D66'], 'C': [223, 'S23', 223, 223, 'GT4', '98J', 432] })
解决方案
核心思路是先反转字典,将原字典中的每个值映射到对应的键,再用这个反转后的字典对DataFrame的目标列进行替换。
- 构建值到键的反转映射字典:
reverse_map = {v: k for k, vals in Keys_nd_Values.items() for v in vals}
该推导式会遍历原字典的每个键值对,把每个值关联到对应键,最终得到:{223: 'ABCD', 343: 'ABCD', 432: 'ABCD', 'S23': 'ZXS', 'GT4': 'ZXS', '98J': 'ZXS'}
- 对DataFrame的
C列进行映射替换:
df['C'] = df['C'].map(reverse_map)
最终结果
执行后得到的DataFrame如下:
A B C 0 12525 1FWE23 ABCD 1 14654 14654 ZXS 2 24798 24798 ABCD 3 38945 38945 ABCD 4 46456 46485 ZXS 5 AD545 45346 ZXS 6 A5D66 A5D66 ABCD
内容的提问来源于stack exchange,提问作者Pravin
相关产品推荐
相关产品推荐

