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

如何在Python中将嵌套字典映射为指定格式的DataFrame列?

问题描述

我有如下嵌套字典:

X = {'A':{'col1':12,'col-2':13},'B':{'col1':12,'col-2':13},'C':{'col1':12,'col-2':13},'D':{'col1':12,'col-2':13}}
Y = {'A':{'col1':3,'col-2':5},'B':{'col1':1,'col-2':2},'C':{'col1':4,'col-2':7},'D':{'col1':8,'col-2':7}}
Z = {'A':{'col1':6,'col-2':7},'B':{'col1':4,'col-2':7},'C':{'col1':5,'col-2':7},'D':{'col1':4,'col-2':9}}

同时有一个仅含单列的DataFrame:

import pandas as pd
df = pd.DataFrame(['A','B','C','D'], columns=['Names'])

希望将字典映射后得到如下格式的DataFrame:

Names Col-1_X  Col-1_Y  Col-1_Z  Col-2_X  Col-2_Y  Col-2_Z
A      12          3      6         13      5         7
B      12          1      4         13      2         7
C      12          4      5         13      7         7
D      12          8      4         13      7         9

请问如何实现?

解决方案

可以通过以下两种方式快速实现需求:

方法一:分步转换合并

  1. 将每个字典转换为带后缀的DataFrame,同步调整列名匹配目标格式:
import pandas as pd

# 转换并调整X字典的列名
df_x = pd.DataFrame(X).T.add_suffix('_X').rename(columns={'col1_X':'Col-1_X', 'col-2_X':'Col-2_X'})
# 转换并调整Y字典的列名
df_y = pd.DataFrame(Y).T.add_suffix('_Y').rename(columns={'col1_Y':'Col-1_Y', 'col-2_Y':'Col-2_Y'})
# 转换并调整Z字典的列名
df_z = pd.DataFrame(Z).T.add_suffix('_Z').rename(columns={'col1_Z':'Col-1_Z', 'col-2_Z':'Col-2_Z'})

这里.T用于转置字典生成的DataFrame,让行索引对应Names列的值;add_suffix给列名添加来源标识,rename修正列名格式。

  1. 合并所有DataFrame并关联原表:
# 按列合并三个转换后的DataFrame
combined_df = pd.concat([df_x, df_y, df_z], axis=1)
# 基于Names列和索引匹配,得到最终结果
result = df.merge(combined_df, left_on='Names', right_index=True)

方法二:批量处理字典(更灵活)

如果后续需要新增类似字典,用批量处理的方式更高效:

import pandas as pd

# 把字典和对应的来源标识打包成列表
dict_with_suffix = [(X, 'X'), (Y, 'Y'), (Z, 'Z')]
processed_dfs = []

for data_dict, suffix in dict_with_suffix:
    # 转换字典为DataFrame并添加后缀
    temp_df = pd.DataFrame(data_dict).T.add_suffix(f'_{suffix}')
    # 修正列名格式
    temp_df.columns = temp_df.columns.str.replace('col1', 'Col-1').str.replace('col-2', 'Col-2')
    processed_dfs.append(temp_df)

# 合并所有处理后的DataFrame
combined_df = pd.concat(processed_dfs, axis=1)
# 关联原表得到结果
result = df.merge(combined_df, left_on='Names', right_index=True)

执行上述代码后,result就是你需要的目标格式DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:39:14