首页 > 解决方案 > Pandas/Numpy 的历史平均值

问题描述

我有以下熊猫数据框(df):

2013-01-01   7
2013-01-02   4
2013-01-02   8
2013-01-08   8
2013-01-11  10
2013-01-12   7    

根据这些数字(实际上是学校成绩),我想绘制一个描述历史平均值的图表。

期望的输出:

2013-01-01   7.000000
2013-01-02   6.333333
2013-01-03   6.333333
2013-01-04   6.333333
2013-01-05   6.333333
2013-01-06   6.333333    
2013-01-07   6.333333
2013-01-08   6.750000
2013-01-09   6.750000
2013-01-10   6.750000
2013-01-11   7.400000
2013-01-12   7.333333

df.expanding().mean()给我:

2013-01-01  7.000000
2013-01-02  5.500000
2013-01-02  6.333333
2013-01-08  6.750000
2013-01-11  7.400000
2013-01-12  7.333333

这是即将发生的事情,但我想要介于两者之间的日期。

如果我在(ie. )resample的间隔上做 a ,我会得到:1ddf.expanding().mean().resample("1d").mean()

 2013-01-01  7.000000
 2013-01-02  5.916667
 2013-01-03       NaN
 2013-01-04       NaN
 2013-01-05       NaN
 2013-01-06       NaN
 2013-01-07       NaN
 2013-01-08  6.750000
 2013-01-09       NaN
 2013-01-10       NaN
 2013-01-11  7.400000
 2013-01-12  7.333333

这里的问题是非唯一索引(两次 2013-01-02)。(NaN 可以固定 :-))

如何获得所需的输出?

标签: pythonpandas

解决方案


用于Resampler.last重复日期时间的最后一个值,然后通过前向填充替换缺失的行:

s = df.expanding().mean().resample("1d").last().ffill()
print (s)
2013-01-01    7.000000
2013-01-02    6.333333
2013-01-03    6.333333
2013-01-04    6.333333
2013-01-05    6.333333
2013-01-06    6.333333
2013-01-07    6.333333
2013-01-08    6.750000
2013-01-09    6.750000
2013-01-10    6.750000
2013-01-11    7.400000
2013-01-12    7.333333
Freq: D, Name: A, dtype: float64

推荐阅读