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

如何从三列Pandas DataFrame生成以(date,ticker)为键的字典?

问题

我正在处理一个包含三列股票收益数据的Pandas DataFrame,列名分别为date、ticker、total_return,想要生成一个以date和ticker组成的元组为键、total_return为值的字典。目前生成的字典里total_return被额外当作第三个键,不符合需求。

初始DataFrame示例

date        ticker  total_return
0   2009-10-02  AIR   0.024265
1   2009-10-05  AIR   0.010478
2   2009-10-06  AIR   0.020739
3   2009-10-07  AIR  -0.029594
4   2009-10-08  AIR   0.021848

当前使用的代码

daily_dict_input.set_index(['date','ticker']).stack().to_dict()

当前得到的结果

{(datetime.date(2009, 10, 2), 'AIR', 'total_return'): 0.02426504899673332,
 (datetime.date(2009, 10, 5), 'AIR', 'total_return'): 0.010478359908883794,
 (datetime.date(2009, 10, 6), 'AIR', 'total_return'): 0.020739404869251743,
 (datetime.date(2009, 10, 7), 'AIR', 'total_return'): -0.02959363957597183,
 (datetime.date(2009, 10, 8), 'AIR', 'total_return'): 0.02184797451069631}

期望的结果

{(datetime.date(2009, 10, 2), 'AIR'): 0.02426504899673332,
 (datetime.date(2009, 10, 5), 'AIR'): 0.010478359908883794,
 (datetime.date(2009, 10, 6), 'AIR'): 0.020739404869251743,
 (datetime.date(2009, 10, 7), 'AIR'): -0.02959363957597183,
 (datetime.date(2009, 10, 8), 'AIR'): 0.02184797451069631}

解决方案

不需要使用stack(),直接针对total_return列操作即可,以下是几种简洁高效的实现方式:

方法一:设置索引后提取目标列转字典

先将date和ticker设为复合索引,再直接提取total_return列转换为字典,这是最简洁高效的方式:

daily_dict_input.set_index(['date', 'ticker'])['total_return'].to_dict()

方法二:用zip直接构建键值对

通过两层zip将date和ticker打包成元组作为键,total_return作为值,直接生成字典:

dict(zip(zip(daily_dict_input['date'], daily_dict_input['ticker']), daily_dict_input['total_return']))

方法三:遍历行生成字典

通过itertuples()遍历DataFrame的每一行,手动构建目标格式的键值对:

{(row.date, row.ticker): row.total_return for row in daily_dict_input.itertuples()}

以上三种方法都能直接得到你需要的(date, ticker): total_return格式的字典,其中方法一在处理大规模数据时性能最优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 02:17:28