如何解决将 df 重新采样到较小的时间步长并平均计数
我有一个包含时间段内计数的数据框(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()
之类的操作。这些解决了重采样问题,但不能满足所需的平均值。你有什么建议吗? Tnx
解决方法
试试这个:
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 的长度因子)有点麻烦,但我真的没有在任何地方找到更通用和简单的解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。