Возвращать строки DataFrame для максимальной даты каждого месяца и только в том случае, если она выпадает в последние 2 недели этого месяца - PullRequest
0 голосов
/ 05 ноября 2019

Я хочу вернуть строки, проверив максимальную дату месяца, а затем перепроверив, попадает ли дата в последние 2 недели этого конкретного месяца . Ниже приводится датафрейм, который я использую:

finalPrize date high low

1777.44 2018-07-31 1801.83 1739.32
1797.17 2018-06-27 1798.44 1776.02
1834.33 2018-05-28 1836.56 1786.00
1823.29 2018-04-03 1841.00 1821.50
1847.75 2018-03-29 1847.77 1818.92

Я сослался на другие ответы и нашел способ найти максимальную дату из столбца ' date '. Вот код:

df.index = df['date']

print(df.groupby(df.index.month).apply(lambda x: x.index.max()))

Но это приводит к:

date 1 2019-07-31 2 2019-06-27 3 2019-05-28 4 2019-04-03 5 2019-03-29

Скорее, я хочу вернуть все значения из строк, где встречаются эти даты Но , что дата должна приходиться на последние 2 недели . Я не могу понять, как это сделать!

Итак Ожидаемый результат :

finalPrize date high low

1777.44 2018-07-31 1801.83 1739.32
1797.17 2018-06-27 1798.44 1776.02
1834.33 2018-05-28 1836.56 1786.00
1847.75 2018-03-29 1847.77 1818.92

1 Ответ

1 голос
/ 05 ноября 2019
import calendar

df.index = pd.to_datetime(df.index)
df['day'] = pd.to_numeric(df.index.day)
df['days_in_month'] = df.apply(lambda row : calendar.monthrange(row.name.year,row.name.month)[1], axis = 1)
df['first_day'] = df.apply(lambda row : calendar.monthrange(row.name.year,row.name.month)[0], axis = 1)
df['days_in_last_week'] = ((df['days_in_month'])%7+df['first_day'])%7
df[df['day'] > (df['days_in_month'] - df['days_in_last_week'])]

Надеюсь, это сработает! Сделайте это после того, как вы установите индекс в индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...