gpt4 book ai didi

python - Pandas 基于另一个单索引数据帧查询多索引数据帧

转载 作者:行者123 更新时间:2023-12-05 07:30:58 24 4
gpt4 key购买 nike

我有两个数据框:Data & Positions

Data 具有多重索引:'Date' 和 'Symbol'。Positions 有一个索引:'Date'(并且有一列标签为'Symbol')。两个“日期”-s 都是 DatetimeIndexes。

我想为 Positions 中的所有日期(索引)从 Data 获取“Open”值到 Positions

如果我尝试以下操作:

positions['Open_price'] = data.loc['1997-02-10','AA'].Open

我在 1997 年 2 月 10 日为整个 Positions 数据帧的“Open_price”字段正确获取了“AA”符号的“Open”值。但是,我的目标是获取相关日期(索引)和符号(列值)的“Open_price”。

所以我试试这个:

positions['Open_price'] = data.loc[positions.index,positions.Symbol].Open

然后我得到一个错误:

KeyError: "None of [DatetimeIndex(['1999-01-01',  ...\n  '2018-07-30'],\n  
dtype='datetime64[ns]', length=7151, freq='D')]
are in the [index]"

注意:Data 的“日期”索引有缺失值(周末),这一点很重要。 Positions' 'Date' 索引没有缺失的日期。

我怎样才能让它工作?

重要提示:

接受的答案有效,但我需要将 pandas 版本 0.20.x 升级到 0.23.4!

最佳答案

您可以使用 .join().rename():

position.join(data, on=['Date','Symbol']).rename(columns={'Open': 'Open_price'})

这是一个完整的例子:

data = pd.DataFrame([['08-02-2018', 'NDA', 0.123], ['08-02-2018','DFA', 0.234],
['08-03-2018', 'NFX', 0.451], ['08-04-2018', 'BBA', 0.453]],
columns=['Date', 'Symbol', 'Open']).set_index(['Date', 'Symbol'])

position = pd.DataFrame([['08-02-2018', 'NDA'],['08-03-2018', 'NFX'],
['08-04-2018', 'TYA'],['08-04-2018', 'BBA']],
columns=['Date', 'Symbol']).set_index(['Date'])

data.index = data.index.set_levels([pd.to_datetime(data.index.levels[0]), data.index.levels[1]])
position.index = pd.to_datetime(position.index)

position = position.join(data, on=['Date','Symbol']).rename(columns={'Open': 'Open_price'})

给出:

数据

                    Open
Date Symbol
2018-08-02 NDA 0.123
DFA 0.234
2018-08-03 NFX 0.451
2018-08-04 BBA 0.453

位置

           Symbol
Date
2018-08-02 NDA
2018-08-03 NFX
2018-08-04 TYA
2018-08-04 BBA

使用上面的 .join() 并打印 position 给出:

           Symbol   Open
Date
2018-08-02 NDA 0.123
2018-08-03 NFX 0.451
2018-08-04 TYA NaN
2018-08-04 BBA 0.453

关于python - Pandas 基于另一个单索引数据帧查询多索引数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52006761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com