в pandas DF со столбцами ‘season’ (season1, season2 …) к последнему сезону, который не равен нулю, необходимо добавить 6 месяцев или ~ 182 дня

#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. Спасибо! Спасибо за помощь!