Сложный расчет даты в DataFrame в Pyton Pandas?

#python #pandas #dataframe #date

#python #панды #фрейм данных #Дата

Вопрос:

У меня есть фрейм данных, как показано ниже:

 rng = pd.date_range('2020-12-11', periods=5, freq='T')
df = pd.DataFrame({ 'Date': rng, 'status': ['active', 'active', 'finished', 'finished', 'active'] }) 
 

И мне нужно создать 2 новых столбца в этом фрейме данных:

  1. New1 = количество дней от столбца «Дата» до сегодняшнего дня для статуса «активный»
  2. New2 = количество дней от столбца «Дата» до сегодняшнего дня для статуса «завершено»

Ниже пример результата:

введите описание изображения здесь

Комментарии:

1. Как выглядят новые столбцы по образцам данных?

2. Я добавил примеры результатов

Ответ №1:

Используйте Series.rsub для вычитания с правой стороны с помощью today by Timestamp и Timestamp.floor , преобразуйте временные интервалы в дни по Series.dt.days и назначайте новые столбцы по условию в Series.where :

 rng = pd.date_range('2020-12-01', periods=5, freq='D')
df = pd.DataFrame({ 'Date': rng, 
                    'status': ['active', 'active', 'finished', 'finished', 'active'] }) 

days = df['Date'].rsub(pd.Timestamp('now').floor('d')).dt.days

df['New1'] = days.where(df['status'].eq('active'))
df['New2'] = days.where(df['status'].eq('finished'))
print (df)
        Date    status  New1  New2
0 2020-12-01    active  13.0   NaN
1 2020-12-02    active  12.0   NaN
2 2020-12-03  finished   NaN  11.0
3 2020-12-04  finished   NaN  10.0
4 2020-12-05    active   9.0   NaN
 

Комментарии:

1. У меня ошибка, как показано ниже после вашего кода: TypeError: неподдерживаемые типы операндов для -: ‘Timestamp’ и ‘str’

2. @rumor154 — Есть ли значения в Date столбце datetimes? Кажется, нет, поэтому используйте df['Date'] = pd.to_datetime(df['Date']) перед days = df['Date'].rsub(pd.Timestamp('now').floor('d')).dt.days