python - 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 ,我会得到: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 可以固定 :-))
如何获得所需的输出?
解决方案
用于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
推荐阅读
- angular - Angular 2 / 4 / 5 中的 $watch 和 $watchCollection 是什么?
- android - FloatingActionButton inside ViewPager + CollapsingToolbarLayout
- git - 如何在不影响 master 的情况下删除我的本地分支历史记录
- php - Amphp Artax 错误
- android - Dynamically adding multiple fragments to a single layout
- mysql - having troubles with fetching data from the database on livehost
- java - how is the Y plane from YUV is saved in byte array
- javascript - Vue v-model and proxy first set is not called
- c# - 如何让任务返回到 WPF 中的 UI 线程
- ruby - 如何使用 ruby-msgpack gem 存储 32 位浮点数?