簡體   English   中英

從熊貓數據框中選擇特定日期

[英]Selecting specific date from pandas data-frame

從每日股票價格數據中,我想采樣並選擇月底價格。 我正在完成使用以下代碼。

import datetime
from pandas_datareader import data as pdr
import pandas as pd

end = datetime.date.today()

begin=end-pd.DateOffset(365*2)

st=begin.strftime('%Y-%m-%d')

ed=end.strftime('%Y-%m-%d')


data = pdr.get_data_yahoo("AAPL",st,ed)

mon_data=pd.DataFrame(data['Adj Close'].resample('M').apply(lambda x: x[-2])).set_index(data.index)

上面的行選擇月末數據,這是輸出。

重采樣數據幀的輸出

如果要選擇月份的倒數第二個值,可以使用以下代碼來完成。

mon_data=pd.DataFrame(data['Adj Close'].resample('M').apply(lambda x: x[-2]))

這是輸出。

在此處輸入圖片說明

但是,索引顯示月末值。 當我選擇月份的倒數第二個值時,我希望索引為2015-12-30而不是2015-12-31。 請提出前進的方向。 希望我的問題清楚。

感謝你在期待。

問候,Abhishek

我不確定是否有辦法重新采樣。 但是,您可以使用groupby和TimeGrouper獲得所需的內容。

import datetime
from pandas_datareader import data as pdr
import pandas as pd

end = datetime.date.today()
begin = end - pd.DateOffset(365*2)
st = begin.strftime('%Y-%m-%d')
ed = end.strftime('%Y-%m-%d')

data = pdr.get_data_yahoo("AAPL",st,ed)

data['Date'] = data.index
mon_data = (
    data[['Date', 'Adj Close']]
        .groupby(pd.TimeGrouper(freq='M')).nth(-2)
        .set_index('Date')
)


最簡單的解決方案是獲取新創建的數據框的索引,然后減去要返回的天數:

n = 1   
mon_data=pd.DataFrame(data['Adj Close'].resample('M').apply(lambda x: x[-1-n])) 
mon_data.index = mon_data.index - datetime.timedelta(days=n)

同樣,看到您的數據,我認為您不應該重新采樣到“月末頻率”,而應該重新采樣到“業務月末頻率”:

.resample('BM')

但這還不能涵蓋全部內容,因為例如2017年12月29日是一個工作月的結束日期,但是該日期不會出現在您的數據中(該日期在2017年12月8日結束)。 因此,您可以為此添加一個小修正(假設原始數據按日期排序):

end_of_months = mon_data.index.tolist()
end_of_months[-1] = data.index[-1]
mon_data.index = end_of_months

因此,完整的代碼如下所示:

n = 1  
mon_data=pd.DataFrame(data['Adj Close'].resample('BM').apply(lambda x: x[-1-n])) 

end_of_months = mon_data.index.tolist()
end_of_months[-1] = data.index[-1]
mon_data.index = end_of_months

mon_data.index = mon_data.index - datetime.timedelta(days=n)

順便說一句:您的.set_index(data.index)引發錯誤,因為datamon_data的維數不同( mon_data是每月grouped_by)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM