在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,您可以尝试groupby
和apply
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