【发布时间】:2020-07-10 17:33:33
【问题描述】:
我有一个数据框 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 的日子并不完整。我希望包括 2020-07-11 06:00:00、12:00:00 和 18:00:00 在内的行出现在输出中。
所以我的预期输出应该是:
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]
})
【问题讨论】: