#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 новых столбца в этом фрейме данных:
- New1 = количество дней от столбца «Дата» до сегодняшнего дня для статуса «активный»
- 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