#python #pandas #datetime
#python #pandas #дата и время
Вопрос:
У меня есть pandas DF с несколькими сезонами, и для каждой строки мне нужно добавить 6 месяцев (~ 182 дня) к последнему сезону, который не равен нулю.Даты dtype: datetime64[ns]
указаны .
df
:
S1 S2 S3
2020-12-31 naT naT
2020-12-31 naT naT
2020-12-31 2020-12-31 naT
2020-12-31 2020-12-31 2021-01-31
Желаемый результат:
S1 S2 S3
2021-06-30 naT naT
2021-06-30 naT naT
2020-12-31 2021-06-30 naT
2020-12-31 2020-12-31 2021-07-31
Ответ №1:
Используйте .shift(), чтобы определить, является ли следующая ячейка в строке NaT, а затем используйте pd.DateOffset() для добавления дополнительных месяцев к этим ячейкам:
import pandas as pd
from io import StringIO
text = """
S1 S2 S3
2020-12-31 naT naT
2020-12-31 naT naT
2020-12-31 2020-12-31 naT
2020-12-31 2020-12-31 2021-01-31
"""
df = pd.read_csv(StringIO(text), header=0, sep='s ')
df = df.apply(pd.to_datetime, errors='coerce')
# find in which cells the next value is na
next_value_in_row_na = df.shift(-1, axis=1).isna()
# for each cell where the next value is na, try to add 6 months
df = df.mask(next_value_in_row_na, df pd.DateOffset(months=6))
Результирующий фрейм данных:
S1 S2 S3
0 2021-06-30 NaT NaT
1 2021-06-30 NaT NaT
2 2020-12-31 2021-06-30 NaT
3 2020-12-31 2020-12-31 2021-07-31
Комментарии:
1. Спасибо! Спасибо за помощь!