gpt4 book ai didi

python - Pandas :切片多索引数据框......需要简单的系列

转载 作者:太空宇宙 更新时间:2023-11-04 09:53:59 24 4
gpt4 key购买 nike

我通过从 DataReader 获取面板并将其转换为多索引数据框来创建股票数据的多索引。有时,当我使用 .loc 时,我会得到一个具有 1 个索引的系列,有时我会得到一个具有两个索引的系列。如何按日期切片并获得具有一个索引的系列?代码将帮助...

import pandas_datareader.data as web

# Define the securities to download
symbols = ['AAPL', 'MSFT']

# Define which online source one should use
data_source = 'yahoo'

# Define the period of interest
start_date = '2010-01-01'
end_date = '2010-12-31'

# User pandas_reader.data.DataReader to load the desired data.
panel = web.DataReader(symbols, data_source, start_date, end_date)

# Convert panel to multiindex dataframe
midf = panel.to_frame()

# for slicing multiindex dataframes it must be sorted
midf = midf.sort_index(level=0)

这里我选择我想要的列:

adj_close = midf['Adj Close']
adj_close.head()

我得到一个包含两个索引(Dateminor)的系列:

Date        minor
2010-01-04 AAPL 27.505054
SPY 96.833946
2010-01-05 AAPL 27.552608
SPY 97.090271
2010-01-06 AAPL 27.114347
Name: Adj Close, dtype: float64

现在我使用 : 选择苹果来选择所有日期。

aapl_adj_close = adj_close.loc[:, 'AAPL']
aapl_adj_close.head()

并获取索引为 Date 的系列。这就是我要找的!

Date
2010-01-04 27.505054
2010-01-05 27.552608
2010-01-06 27.114347
2010-01-07 27.064222
2010-01-08 27.244156
Name: Adj Close, dtype: float64

但是当我实际按日期切片时,我没有得到那个系列:

sliced_aapl_adj_close  = adj_close.loc['2010-01-04':'2010-01-06', 'AAPL']
sliced_aapl_adj_close.head()

我得到一个有两个索引的系列:

Date        minor
2010-01-04 AAPL 27.505054
2010-01-05 AAPL 27.552608
2010-01-06 AAPL 27.114347
Name: Adj Close, dtype: float64

切片是正确的,值也是正确的,但我不希望其中有次要索引(因为我想将这个系列传递给绘图)。切片的正确方法是什么?

谢谢!

最佳答案

您可以使用:

df = df.reset_index(level=1, drop=True)

或者:

df.index = df.index.droplevel(1)

另一种解决方案是通过 unstack reshape 对于 DataFrame 然后通过 [] 选择:

df = adj_close.unstack()

print (df)
minor AAPL SPY
Date
2010-01-04 27.505054 96.833946
2010-01-05 27.552608 97.090271
2010-01-06 27.114347 NaN

print (df['AAPL'])

Date
2010-01-04 27.505054
2010-01-05 27.552608
2010-01-06 27.114347
Name: AAPL, dtype: float64

关于python - Pandas :切片多索引数据框......需要简单的系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46658901/

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