如何用Pandas DataFrame替换字典值并生成含汇总的结构化数据?
简洁实现字典值替换与层级合并的方案
嘿,我明白你想要摆脱繁琐的列表推导式,用更清爽的方式完成需求!下面是一套高效易懂的解决方案,分几步就能搞定:
步骤1:先做个快速映射字典
首先我们把DataFrame里的标识和数值转成一个键值对字典,这样后续替换的时候能直接查表,不用反复去DataFrame里找:
import pandas as pd # 你的原始输入数据 d = {'X':{'a':['a1'], 'b':['b1']}, 'Y':{'c':['c1','c2'],'d':['d1','d2']}} df = pd.DataFrame({'variable':['a1','b1','c1','c2','d1','d2'], 'value':[54,67,25,16,34,24]}) # 生成映射字典:key是a1/b1这类标识,value是对应的数值 map_dict = df.set_index('variable')['value'].to_dict()
步骤2:一键处理替换+层级合并
用嵌套字典推导式加上简单的列表扁平化,就能一次性完成内层值替换和顶层的合并计算,逻辑清晰又简洁:
result_dict = {} for top_key, inner_dict in d.items(): # 先把内层每个列表的标识替换成对应数值 mapped_inner = {k: [map_dict[v] for v in vs] for k, vs in inner_dict.items()} # 把当前顶层下的所有数值合并成一个列表(扁平化内层所有子列表) top_combined = [num for sublist in mapped_inner.values() for num in sublist] # 把顶层合并值和处理后的内层项都加入结果字典 result_dict[top_key] = top_combined result_dict.update(mapped_inner)
步骤3:转成目标DataFrame
最后把结果字典直接转换成你需要的DataFrame格式:
final_df = pd.DataFrame(list(result_dict.items()), columns=['category', 'values'])
看看最终输出
打印final_df就能得到完全符合预期的结果:
category values 0 X [54, 67] 1 a [54] 2 b [67] 3 Y [25, 16, 34, 24] 4 c [25, 16] 5 d [34, 24]
这个方案的好处在于:
- 用映射字典避免了重复查询DataFrame,效率更高
- 字典推导式比多层嵌套的列表推导式可读性强很多
- 顶层合并值用列表扁平化的写法,简洁又直观
内容的提问来源于stack exchange,提问作者HappyPy
相关产品推荐
相关产品推荐

