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

17

我有一个带有两个索引的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()

屏幕截图

重新索引的步骤如下:

# 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对象已被弃用...


1
也许你正在寻找 adj_close.reindex(all_weekdays, level=0).ffill() - cs95
太好了!那个有效。我很乐意接受它作为答案。非常感谢您的快速回复! - Bruno
1个回答

21

如果您想在特定的级别上重新索引,那么reindex接受一个level参数,您可以传递 -

adj_close.reindex(all_weekdays, level=0)

传递level参数时,不能同时传递method参数(reindex会抛出一个TypeError),因此可以在之后链接一个ffill调用 -

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接