Как принимать данные, начиная с самого последнего понедельника - PullRequest
1 голос
/ 08 апреля 2020

У меня есть следующий код:

import pandas as pd
from pandas import datetime
from pandas import DataFrame as df
import matplotlib
from pandas_datareader import data as web
import matplotlib.pyplot as plt
import datetime
import numpy as np

stock = '^GSPC'
start = datetime.date(2000,1,1)
end = datetime.date.today()
data = web.DataReader(stock, 'yahoo',start, end)
data.index = pd.to_datetime(data.index, format ='%Y-%m-%d')
data['Day Name'] = data.index.weekday_name
data.set_index('day',append=True,inplace=True)
data.set_index('Day Name', append=True, inplace=True)
data['pct_day']= data['Adj Close'].pct_change()
df = data.groupby(['Day Name']).mean()
df = df.drop( index=['Saturday','Sunday'])
df = df.reindex(['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'])

Что мне нужно сделать здесь, независимо от введенной даты, данные должны приниматься только с самого последнего понедельника и ничего до этого. Любая помощь здесь будет оценена, спасибо заранее.

1 Ответ

1 голос
/ 08 апреля 2020

Вы можете удалить значения перед первым Monday с помощью Series.eq, Series.cumsum и получить все строки с не равным 0 на Series.ne:

data['Day Name'] = data.index.weekday_name

data = data[data['Day Name'].eq('Monday').cumsum().ne(0)].copy()

data.set_index('day',append=True,inplace=True)

Другая идея заключается в использовании Series.idxmax для первого значения индекса и передачи в DataFrame.loc, необходим только по крайней мере один Monday в данных:

data['Day Name'] = data.index.weekday_name

data = data.loc[data['Day Name'].eq('Monday').idxmax():]

data.set_index('day',append=True,inplace=True)

Образец :

rng = pd.date_range('2017-04-01', periods=10)
data = pd.DataFrame({'a': range(10)}, index=rng)  

data['Day Name'] = data.index.weekday_name
data = data[data['Day Name'].eq('Monday').cumsum().ne(0)].copy()
print (data)
            a   Day Name
2017-04-03  2     Monday
2017-04-04  3    Tuesday
2017-04-05  4  Wednesday
2017-04-06  5   Thursday
2017-04-07  6     Friday
2017-04-08  7   Saturday
2017-04-09  8     Sunday
2017-04-10  9     Monday
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...