Временная последовательность в кадре данных pandas

#python #pandas #pandas-groupby #sequence

Вопрос:

Ниже приведен пример фрейма данных (df):-

альфа ценность
0 a 5
1 a 8
2 a 4
3 b 2
4 b 1

Я знаю, как составить последовательность (числа) в соответствии с группой:

 df["serial"] = df.groupby("alpha").cumcount() 1
 
альфа ценность серийный
0 a 5 1
1 a 8 2
2 a 4 3
3 b 2 1
4 b 1 2

Но вместо числа мне нужна последовательность даты и времени с интервалом в 30 минут:

Ожидаемый результат:

альфа ценность серийный
0 a 5 2021-01-01 23:30:00
1 a 8 2021-01-02 00:00:00
2 a 4 2021-01-02 00:30:00
3 b 2 2021-01-01 23:30:00
4 b 1 2021-01-02 00:00:00

Ответ №1:

Вы можете просто умножить свой результат на pd.Timedelta :

 print ((df.groupby("alpha").cumcount() 1)*pd.Timedelta(minutes=30) pd.Timestamp("2021-01-01 23:00:00"))

0   2021-01-01 23:30:00
1   2021-01-02 00:00:00
2   2021-01-02 00:30:00
3   2021-01-01 23:30:00
4   2021-01-02 00:00:00
dtype: datetime64[ns]
 

Ответ №2:

Попробуйте с to_datetime и groupby с cumcount , а затем умножьте pd.Timedelta на 30 минут:

 >>> df['serial'] = pd.to_datetime('2021-01-01 23:30:00')   df.groupby('alpha').cumcount() * pd.Timedelta(minutes=30)
>>> df
  alpha  value              serial
0     a      5 2021-01-01 23:30:00
1     a      8 2021-01-02 00:00:00
2     a      4 2021-01-02 00:30:00
3     b      2 2021-01-01 23:30:00
4     b      1 2021-01-02 00:00:00
>>>