如何从Pandas DataFrame字典列为每个Name生成独立的拆分后DataFrame
实现方案
解决思路
- 逐行遍历原始DataFrame,为每个Name单独处理其对应的两个字典格式列
- 分别将Trust_Value、Affordability_Value的字典键值对转换为独立的双列子DataFrame
- 横向拼接两个子DataFrame后补充Name字段,存入结果字典方便直接调用
如果两个字典的键值对数量不一致,拼接时缺失位置会自动填充NaN,符合常规数据处理逻辑,如有特殊对齐需求可自行补全空值。
完整代码
import pandas as pd # 构造原始DataFrame(直接使用你提供的to_dict数据) raw_data = {'Name': {0: 'J.', 1: 'M.', 2: 'C.'}, 'Trust_Value': {0: {'J.': 0.25, 'M.': 0.23, 'D.': 0.22, 'S.':0.12,'N.':0.12}, 1: {'M.': 0.12, 'S.': 0.14, 'C.': 0.12, 'D.': 0.12}, 2: {'S.': 0.21, 'N.': 0.13, 'C.':0.34, 'D.':0.12, 'T.':0.42}}, 'Affordability_Value':{0: {'Z.': 0.024, 'M.': 0.34, 'D.': 0.21, 'X.':0.23,'N.':0.15}, 1: {'S.': 0.51, 'B.': 0.21, 'C.': 0.29, 'D.': 0.12}, 2: {'D.': 0.26, 'B.': 0.26, 'C.':0.38, 'D2.':0.25, 'T.':0.42}}} df = pd.DataFrame(raw_data) # 存储每个Name对应结果的字典,键为Name取值,值为处理好的DataFrame name_dfs = {} for _, row in df.iterrows(): current_name = row['Name'] # 拆分Trust_Value字典为双列 trust_df = pd.DataFrame(row['Trust_Value'].items(), columns=['Trust_Key', 'Trust_Value']) # 拆分Affordability_Value字典为双列 afford_df = pd.DataFrame(row['Affordability_Value'].items(), columns=['Affordability_Key', 'Affordability_Value']) # 横向拼接两个子DataFrame merged = pd.concat([trust_df, afford_df], axis=1) # 首列插入Name字段 merged.insert(0, 'Name', current_name) # 存入结果字典 name_dfs[current_name] = merged # 调用示例:获取J.对应的DataFrame print(name_dfs['J.'])
输出说明
生成的所有独立DataFrame都存储在name_dfs字典中,你可以通过name_dfs[对应Name值]直接获取需要的DataFrame,输出格式和你要求的示例完全匹配。
内容的提问来源于stack exchange,提问作者LdM
相关产品推荐
相关产品推荐

