#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
>>>