ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

重新索引MultiIndex数据框的特定级别

2019-11-10 15:55:19  阅读:292  来源: 互联网

标签:multi-index pandas dataframe reindex python


我有一个带有两个索引的DataFrame,并希望通过其中一个索引对其进行重新索引.

from pandas_datareader import data
import matplotlib.pyplot as plt
import pandas as pd

# Instruments to download
tickers = ['AAPL']

# Online source one should use
data_source = 'yahoo'

# Data range
start_date = '2000-01-01'
end_date = '2018-01-09'

# Load the desired data
panel_data = data.DataReader(tickers, data_source, start_date, end_date).to_frame()
panel_data.head()

Screenshot

重新索引如下:

# Get just the adjusted closing prices
adj_close = panel_data['Adj Close']

# Gett all weekdays between start and end dates
all_weekdays = pd.date_range(start=start_date, end=end_date, freq='B')

# Align the existing prices in adj_close with our new set of dates
adj_close = adj_close.reindex(all_weekdays, method="ffill")

最后一行给出以下错误:

TypeError: '<' not supported between instances of 'tuple' and 'int'

这是因为DataFrame索引是元组列表:

panel_data.index[0]
(Timestamp('2018-01-09 00:00:00'), 'AAPL')

是否可以重新索引adj_close?顺便说一句,如果我不使用to_frame()将Panel对象转换为DataFrame,则重新索引将按原样工作.但是似乎不建议使用Panel对象…

解决方法:

如果您希望在某个级别上重新索引,则reindex接受您可以传递的level参数-

adj_close.reindex(all_weekdays, level=0)

传递级别参数时,不能同时传递方法参数(reindex会引发TypeError),因此可以在以下位置链接一个ffill调用:

adj_close.reindex(all_weekdays, level=0).ffill()

标签:multi-index,pandas,dataframe,reindex,python
来源: https://codeday.me/bug/20191110/2013762.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有