pandas 计算平均值(仅知道一些“检查点”)

xriantvc  于 2023-01-07  发布在  其他
关注(0)|答案(1)|浏览(83)

我试着把我的头缠在Pandas/麻木上,做一些可能很简单的事情(但我缺乏知识...)
这个系列看起来像这样:

2022-01-01 | 100
    2022-01-02 | nan
    2022-01-03 | nan
    2022-01-04 | 200
    2022-01-05 | nan
    2022-01-06 | nan
    2022-01-07 | nan
    2022-01-08 | 250
    2022-01-09 | nan
    2022-01-10 | 400
    2022-01-11 | nan

这表示冲减。因此,在上例中,1月8日的冲减变为250,1月4日的最后已知值为200。因此,我们知道在该期间,平均值为每天12.5。我想获得的结果如下:日平均值(回顾)。因此,从上面的例子中,这将是我要寻找的结果:

2022-01-01 | 33.3   | 100
    2022-01-02 | 33.3   | 133.3
    2022-01-03 | 33.3   | 166.6
    2022-01-04 | 12.5   | 200
    2022-01-05 | 12.5   | 212.5
    2022-01-06 | 12.5   | 225
    2022-01-07 | 12.5   | 237.5
    2022-01-08 | 75     | 250
    2022-01-09 | 75     | 325
    2022-01-10 | 0      | 400
    2022-01-11 | 0      | 400

最后一列只是检查所有内容是否都按预期累积,但这不是必需的,我很好使用Series作为输出。
我已经尝试过用很多方法扭曲Series,也用调试器做过,但是唉,我想最好是问一个知道的人,沿着一些解释,这样我就可以更好地理解如何达到那个结果。

k4ymrczo

k4ymrczo1#

您正在查找pd.Series.interpolate

>>> series
date
2022-01-01    100.0
2022-01-02      NaN
2022-01-03      NaN
2022-01-04    200.0
2022-01-05      NaN
2022-01-06      NaN
2022-01-07      NaN
2022-01-08    250.0
2022-01-09      NaN
2022-01-10    400.0
2022-01-11      NaN
Name: value, dtype: float64
>>> series.interpolate()
date
2022-01-01    100.000000
2022-01-02    133.333333
2022-01-03    166.666667
2022-01-04    200.000000
2022-01-05    212.500000
2022-01-06    225.000000
2022-01-07    237.500000
2022-01-08    250.000000
2022-01-09    325.000000
2022-01-10    400.000000
2022-01-11    400.000000
Name: value, dtype: float64
>>> series.interpolate().diff().shift(-1)
date
2022-01-01    33.333333
2022-01-02    33.333333
2022-01-03    33.333333
2022-01-04    12.500000
2022-01-05    12.500000
2022-01-06    12.500000
2022-01-07    12.500000
2022-01-08    75.000000
2022-01-09    75.000000
2022-01-10     0.000000
2022-01-11          NaN
Name: value, dtype: float64

相关问题