我有以下熊猫数据框(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可以固定:-))
如何获得所需的输出?
答案 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