将 df 重新采样为更小的时间步长并平均计数

Resample df to smaller time steps and average the counts

我有一个数据框,其中包含一段时间内的计数(3 小时内的降雨量),如下所示:

time_stamp,           rain_fall_in_mm
2019-01-01 00:03:00,  0.0
2019-01-01 00:06:00,  3.9
2019-01-01 00:09:00,  0.0
2019-01-01 00:12:00,  1.2

我需要将数据帧上采样到 1 小时的时间段,我想对雨的计数进行平均,这样就没有 NaN 并且雨的总和保持不变,这意味着这是期望的结果:

time_stamp,           rain_fall_in_mm
2019-01-01 00:01:00,  0.0
2019-01-01 00:02:00,  0.0
2019-01-01 00:03:00,  0.0
2019-01-01 00:04:00,  1.3
2019-01-01 00:05:00,  1.3
2019-01-01 00:06:00,  1.3
2019-01-01 00:07:00,  0.0
2019-01-01 00:08:00,  0.0
2019-01-01 00:09:00,  0.0
2019-01-01 00:10:00,  0.4
2019-01-01 00:11:00,  0.4
2019-01-01 00:12:00,  0.4

我发现我可以做 series.resample('1H').bfill()series.resample('1H').pad() 之类的事情。这些解决了重采样问题,但没有实现所需的平均。你有什么建议吗?发送

试试这个:

df2 = df.reindex(pd.date_range(start = '1/1/2019',periods = 13,freq='1min'))
df2.fillna(0).groupby((~df2['rain_fall_in_mm'].isna()).iloc[::-1].cumsum()).transform('mean')

首先,确保您的索引采用日期时间格式。如果不是,您可以通过以下方式执行此操作:

df.set_index(pd.date_range(start=df.time_stamp[0], periods=len(df), freq='3H'), inplace=True)

然后如果只想升级一列就使用这个

df_rain_hourly_column = df.resample('H').bfill().rain / 3.

如果您的初始 df 仅包含浮点数,您可以对整个数据帧进行操作

df2 = df.resample('H').bfill() / 3.

除以3.(old_time_period/new_time_period的长度因子)有点hacky,但我真的没有在任何地方找到更通用和更简单的解决方案。