У меня есть df кадра данных, подобный приведенному ниже:
city datetime value
0 city_a 2020-07-10 2
1 city_a 2020-07-11 5
2 city_b 2020-07-11 4
И я пытаюсь пересчитать ежедневные даты с частотой 6 часов (данные каждые 00 часов, 6 часов, 12 часов и 18 часов).
Следующий код дает мне почти тот результат, который я ожидал
my_df = my_df.set_index(['datetime', 'city'])
my_df = my_df.unstack(-1).resample('6H').pad()
my_df = my_df.stack().reset_index()
my_df = my_df[['city', 'datetime', 'value']]
my_df = my_df.sort_values(['city', 'datetime'])
Результат:
city datetime value
0 city_a 2020-07-10 00:00:00 2.0
1 city_a 2020-07-10 06:00:00 2.0
2 city_a 2020-07-10 12:00:00 2.0
3 city_a 2020-07-10 18:00:00 2.0
4 city_a 2020-07-11 00:00:00 5.0
5 city_b 2020-07-11 00:00:00 4.0
Однако мы видим, что день 2020-07-11 еще не завершен . Я хотел бы, чтобы в выводе появлялись строки, включая 06:00:00, 12:00:00 и 18:00:00 от 2020-07-11.
Итак, мой ожидаемый результат должен быть:
city datetime value
0 city_a 2020-07-10 00:00:00 2.0
1 city_a 2020-07-10 06:00:00 2.0
2 city_a 2020-07-10 12:00:00 2.0
3 city_a 2020-07-10 18:00:00 2.0
4 city_a 2020-07-11 00:00:00 5.0
6 city_a 2020-07-11 06:00:00 5.0
8 city_a 2020-07-11 12:00:00 5.0
10 city_a 2020-07-11 18:00:00 5.0
5 city_b 2020-07-11 00:00:00 4.0
7 city_b 2020-07-11 06:00:00 4.0
9 city_b 2020-07-11 12:00:00 4.0
11 city_b 2020-07-11 18:00:00 4.0
Есть ли элегантный способ сделать это с помощью Pandas?
Код для генерации фрейма данных:
my_df = pd.DataFrame(data = {
'city': ['city_a', 'city_a', 'city_b'],
'datetime':
[pd.to_datetime('2020/07/10'),pd.to_datetime('2020/07/11'),pd.to_datetime('2020/07/11')],
'value': [2,5,4]
})