Панды: Выберите последние даты с уровня отсечения - PullRequest
1 голос
/ 06 апреля 2019

У меня есть список дат и уровень отсечения: 31 марта.Я хочу посмотреть на первую дату до 31 марта и сделать ее последней датой в году, а затем выбрать последние 3 года и поместить их в 1 год.(Например, если мы посмотрим на 1997 год, первая дата до марта 1997 года: индекс 8, дата: 1996-12-13. Теперь я хочу оглянуться назад на 3 даты и поставить их под тем же годом, 1997, что означает индекс 7, 6 и 5 | То же самое с 1995 года, первой датой до марта 1995 года, является индекс 0, дата: 1994-12-15, но до индекса 0 нет доступных данных.

Мои данные выглядят какэто:

    date
0   1994-12-15
1   1995-07-06
2   1995-09-13
3   1995-12-12
4   1996-03-14
5   1996-07-01
6   1996-09-17
7   1996-11-12
8   1996-12-13
9   1997-06-25
10  1997-09-10
11  1997-12-12

И я хочу, чтобы это выглядело следующим образом:

    date        year
0   1994-12-15  1995
1   1995-07-06  1996
2   1995-09-13  1996
3   1995-12-12  1996
4   1996-03-14  1996
5   1996-07-01  1997
6   1996-09-17  1997
7   1996-11-12  1997
8   1996-12-13  1997
9   1997-06-25  1998
10  1997-09-10  1998
11  1997-12-12  1998

Пожалуйста, дайте мне знать, если у вас есть идеи, как я могу это сделать.

1 Ответ

3 голосов
/ 06 апреля 2019

Использовать merge_asof с помощником DataFrame, созданным минимальным и максимальным годами, и date_range, при этом значение заполнения заполняется до отсечения по столбцу df1['year']:

y = df['date'].dt.year
#added +-1 year (not necessary)
miny = y.min() - 1
maxy = y.max() + 2

df1 = pd.DataFrame({'date':pd.date_range(f'{miny}-03-31', f'{maxy}-03-31', freq='A-Mar')})
df1['year'] = df1['date'].dt.year  + 1
print (df1)
        date  year
0 1993-03-31  1994
1 1994-03-31  1995
2 1995-03-31  1996
3 1996-03-31  1997
4 1997-03-31  1998
5 1998-03-31  1999
6 1999-03-31  2000

df = pd.merge_asof(df,df1,on='date')
print (df)
         date  year
0  1994-12-15  1995
1  1995-07-06  1996
2  1995-09-13  1996
3  1995-12-12  1996
4  1996-03-14  1996
5  1996-07-01  1997
6  1996-09-17  1997
7  1996-12-12  1997
8  1996-12-13  1997
9  1997-06-25  1998
10 1997-09-10  1998
11 1997-12-12  1998
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...