python - Pandas 基于另一个单索引数据帧查询多索引数据帧
问题描述
我有两个数据框:Data & Positions。
数据具有多索引:“日期”和“符号”。 Positions有一个索引:'Date'(并且有一列带有标签'Symbol')。两个 'Date'-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的“日期”索引有缺失值(周末)。职位的“日期”索引没有缺失日期。
我怎样才能使这项工作?
重要的:
接受的答案有效,但我需要将熊猫版本 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
推荐阅读
- sql - 想同时更新和插入,两者不只一个
- android - 被 ionic-5 angular 中的 CORS 策略阻止
- javascript - 第一种文件类型预览图像显示在第二种文件类型上
- angular - ng for 不打印数据
- python - 按值查找用户排名
- python - 尽管明确将其添加到响应中,但 CORS 标头不存在
- r - 在 read_html() 中传递 user_agent() 参数
- sql-server - SSIS 数据流中的 Oracle VIEW 数据源
- java - 如何在 Java (Apache CXF) 中指定(给出实际名称)XML 字段
- python - 通过使用元组列表作为索引从 numpy 2d 数组中获取值