熊猫/努皮的历史平均值

时间:2018-09-28 12:30:26

标签: python pandas

我有以下熊猫数据框(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

这是即将来临的事情,但我想在两者之间找到日期。

如果我以resample(即1d)的间隔进行一次df.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可以固定:-))

如何获得所需的输出?

1 个答案:

答案 0 :(得分:3)

使用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