如何在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
请问如何实现?
解决方案
可以通过以下两种方式快速实现需求:
方法一:分步转换合并
- 将每个字典转换为带后缀的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修正列名格式。
- 合并所有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
相关产品推荐
相关产品推荐

