#python
#python
Вопрос:
У меня есть данные временного ряда, в которые мне нужно добавить строку на основе даты последнего обновления столбца этапа. И у меня есть повторение данных: например
Id Date Stage
1 20-12-2013 Basic
1 20-10-2015 Basic
1 05-12-2018 Advanced
2 20-05-2019 Basic
2 15-12-2019 Advanced
3 20-01-2020 Advanced
4 20-10-2020 Basic
4 20-12-2020 Advanced
Ожидаемый результат :
Id Date Stage Stage Changed Since
1 20-12-2013 Basic NaN
1 20-10-2015 Basic NaN
1 05-12-2018 Advanced 05-12-2018 - 20-10-2015
2 20-05-2019 Basic NaN
2 15-12-2019 Advanced 15-12-2019 - 20-05-2019
3 20-01-2020 Advanced NaN
4 20-10-2020 Basic NaN
4 20-12-2020 Advanced 20-12-2020 - 20-10-2020
Итак, в основном, когда этап изменяется в пределах одного и того же идентификатора, мне нужно получить количество дней с момента изменения этапа. И этап изменен, поскольку столбец должен показывать это.
Ответ №1:
Оформить заказ https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas .DataFrame.shift.html
Вы могли бы создать 2 сдвинутых вниз столбца для stage
и date
и выполнить сравнение
d = {
1: {'date': datetime(2010, 10, 10), 'stage': 'basic'},
2: {'date': datetime(2010, 11, 10), 'stage': 'basic'},
3: {'date': datetime(2010, 12, 10), 'stage': 'advanced'},
}
df = pd.DataFrame(d).T
# created shifted columns
df['stage_lagged'] = df['stage'].shift(1)
df['date_lagged'] = df['date'].shift(1)
# compare values
df.loc[df['stage'] != df['stage_lagged'], 'stage_changed_since'] = df['date_lagged']
# convert the date column to a date type
df['stage_changed_since'] = pd.to_datetime(df['stage_changed_since'])
df = df[['date', 'stage', 'stage_changed_since']]
И вы получаете
date stage stage_changed_since
1 2010-10-10 basic NaT
2 2010-11-10 basic NaT
3 2010-12-10 advanced 2010-11-10
Комментарии:
1. В основном, когда этап изменяется в пределах одного и того же идентификатора, мне нужно получить количество дней с момента изменения этапа. И этап изменен, поскольку столбец должен показывать это.