У меня есть таблица со следующими столбцами данных
+------+--------+------------+---+---+---+
| area | locale | date | i | t | o |
+------+--------+------------+---+---+---+
| abc | abc25 | 2001-03-01 | 1 | | |
| abc | abc25 | 2001-04-01 | | 1 | |
| abc | abc25 | 2001-05-01 | 1 | | |
| abc | abc25 | 2001-06-01 | | 1 | |
| abc | abc25 | 2001-07-01 | | | 1 |
| def | def12 | 2001-03-01 | | 1 | |
| def | def12 | 2001-04-01 | | 1 | |
| def | def12 | 2001-05-01 | 1 | | |
| def | def12 | 2001-06-01 | | | 1 |
| def | def12 | 2001-07-01 | | | 1 |
+------+--------+------------+---+---+---+
Пример вывода:
+------+--------+------------+------------+---+---+---+
| area | locale | date | end date | i | t | o |
+------+--------+------------+------------+---+---+---+
| abc | abc25 | 2001-03-01 | 2001-04-01 | 1 | | |
| abc | abc25 | 2001-04-01 | 2001-05-01 | | 1 | |
| abc | abc25 | 2001-05-01 | 2001-06-01 | 1 | | |
| abc | abc25 | 2001-06-01 | 2001-07-01 | | 1 | |
| abc | abc25 | 2001-07-01 | | | | 1 |
| def | def25 | 2001-03-01 | 2001-04-01 | | 1 | |
| def | def25 | 2001-04-01 | 2001-05-01 | | 1 | |
| def | def25 | 2001-05-01 | 2001-06-01 | 1 | | |
| def | def25 | 2001-06-01 | 2001-07-01 | | | 1 |
| def | def25 | 2001-07-01 | | | | 1 |
+------+--------+------------+------------+---+---+---+
Что мне нужно сделать, это сделать набор столбцов из одного столбца.Технически дата сама по себе является «датой начала», поэтому я могу просто переименовать ее.Это легкая часть.Часть, с которой мне трудно работать, находится в каждой области / локали, в которой мне нужно создать «дату окончания».Эта конечная дата является просто следующей датой в строке в этом разделе, если только ее нет, и тогда это будет просто Нет или это может быть та же дата, например, EG.2001-07-01.
Есть ли способ достичь этого в пандах?
Я пробовал
df['end_date'] = df.groupby('date').Date.apply(lambda x: x.shift(-1).reset_index(0)['locale'])
, но это не нравится.выдает ошибку «Объект DataFrameGroupBy» не имеет атрибута «Дата»