重新采样并计算平均值



在Python中使用panda。

我的数据看起来像:

2018-03-16    5.0
2018-03-17    5.0
2018-03-18    5.0
...
2018-03-31    5.0

使用后

resample('MS').mean()

我得到以下结果:

2018-03-01     5.000000

正确的结果应该是大约2.5,而不是5。重采样方法只计算当月第一天的平均值,而不考虑前几天的值0。例如,当计算年平均值时,这个问题就更加荒谬了——你可以从12月31日开始计算一个时间序列,重新采样会得到x,而不是x/365

当然,肯定有比用零填充缺失的初始日期更好的解决方案吗?有没有一个参数可以解决这个问题?

我应该补充一点,我主要对涉及重采样的解决方案感兴趣,例如,如果有一种简单的方法可以通过设置参数来解决这个问题。如果没有,我将满足于一个不涉及重采样方法的解决方案。因此,我也愿意接受使用重采样以外的方法的建议。

IIUC,您可以尝试groupbyapply

df.index = pd.to_datetime(df.index)
out = (df.groupby(df.index.strftime('%Y-%m'))
.apply(lambda g: g['val'].sum()/pd.Period(g.name).days_in_month)
# or
#      .apply(lambda g: g['val'].sum()/pd.to_datetime(g.name).days_in_month)
.to_frame('val'))
print(out)
val
2018-03  0.645161

相关内容

  • 没有找到相关文章

最新更新