Python字典中基于键前两个值合并DataFrame的方法
解决方案:按字典键的前两个元素合并DataFrame
嘿,这个需求挺典型的,我来分享一个简单直接的实现方式,完全贴合你的预期结果:
核心思路
我们需要按原字典键的前两个元素分组,把同一组下的所有DataFrame按列合并(也就是横向拼接),最后生成以这两个元素为新键的字典。
完整代码实现
import pandas as pd # 你的原始字典 dct = { (1/1 , 2/1, 'AAPL') : pd.DataFrame({'aapl' : [1,2,3]}), (1/1, 2/1 , 'XOM') : pd.DataFrame({'xom' : [4,5,6]}) } # 初始化一个空字典用于存放分组后的结果 merged_dct = {} # 第一步:按键的前两个元素分组收集DataFrame for key, df in dct.items(): # 提取键的前两个元素作为新的分组键 group_key = key[:2] # 如果分组键不存在,就创建一个空列表来存对应的DataFrame if group_key not in merged_dct: merged_dct[group_key] = [] # 将当前DataFrame添加到对应分组的列表中 merged_dct[group_key].append(df) # 第二步:合并每个分组内的DataFrame for group in merged_dct: # 按列合并(axis=1),如果你的DataFrame行索引不一致,可以考虑用join/merge调整 merged_dct[group] = pd.concat(merged_dct[group], axis=1) # 验证结果 print(merged_dct[(1.0, 2.0)])
代码解释
- 第一步遍历原始字典,把每个DataFrame按
键[:2](前两个元素)归类到对应的分组里; - 第二步用
pd.concat(axis=1)把同一分组的DataFrame横向拼接,正好得到你想要的多列DataFrame; - 如果你的场景中不同DataFrame的行索引不匹配,可以把
pd.concat换成pd.merge并指定how='outer'之类的参数来适配。
运行后你会得到预期的结果:
aapl xom 0 1 4 1 2 5 2 3 6
内容的提问来源于stack exchange,提问作者thomas.mac
相关产品推荐
相关产品推荐

