两个日期时间之间的平均值;如果是NaN,则获取最后一个非NaN值

昨天我问了这个问题(有一些很好的答案),它非常相似,但与我现在遇到的问题略有不同。假设我有以下内容pd.DataFrame(dict):

    eff_timestamp       val         id  begin_timestamp     end_timestamp
0   2021-01-01 00:00:00 -0.710230   1   2021-01-01 02:00:00 2021-01-01 05:30:00
1   2021-01-01 01:00:00 0.121464    1   2021-01-01 02:00:00 2021-01-01 05:30:00
2   2021-01-01 02:00:00 -0.156328   1   2021-01-01 02:00:00 2021-01-01 05:30:00
3   2021-01-01 03:00:00 0.788685    1   2021-01-01 02:00:00 2021-01-01 05:30:00
4   2021-01-01 04:00:00 0.505210    1   2021-01-01 02:00:00 2021-01-01 05:30:00
5   2021-01-01 05:00:00 -0.738344   1   2021-01-01 02:00:00 2021-01-01 05:30:00
6   2021-01-01 06:00:00 0.266910    1   2021-01-01 02:00:00 2021-01-01 05:30:00
7   2021-01-01 07:00:00 -0.587401   1   2021-01-01 02:00:00 2021-01-01 05:30:00
8   2021-01-02 00:00:00 -0.160692   2   2021-01-02 12:00:00 2021-01-02 15:30:00
9   2021-01-02 01:00:00 0.306354    2   2021-01-02 12:00:00 2021-01-02 15:30:00
10  2021-01-02 02:00:00 NaN         2   2021-01-02 12:00:00 2021-01-02 15:30:00
11  2021-01-02 03:00:00 NaN         2   2021-01-02 12:00:00 2021-01-02 15:30:00
12  2021-01-02 04:00:00 NaN         2   2021-01-02 12:00:00 2021-01-02 15:30:00
13  2021-01-02 05:00:00 NaN         2   2021-01-02 12:00:00 2021-01-02 15:30:00
14  2021-01-02 06:00:00 NaN         2   2021-01-02 12:00:00 2021-01-02 15:30:00
15  2021-01-02 07:00:00 -0.349705   2   2021-01-02 12:00:00 2021-01-02 15:30:00

我想获得val每个唯一 id的平均值,对于那些val介于begin_timestamp和之间的id end_timestamp。如果没有满足该条件的行,我想获得该id时间段之前的最后一个值。请注意,在此示例中, id=2 没有满足条件的行。以前我可以切片数据,所以我只保留 begin 和 end_timestamp 之间的行,然后使用 groupby。我上一篇文章中的解决方案然后替换了 groupby 对象中的 NaN 值。但是,在上面的示例中, id=2 根本没有满足条件的行,因此没有创建可以替换的 NaN 值。因此,如果我根据上述标准对数据进行切片:

sliced = df[(df.eff_timestamp > df.begin_timestamp) & (df.eff_timestamp < df.end_timestamp)]
sliced
>>>     

    eff_timestamp       val         id  begin_timestamp     end_timestamp
3   2021-01-01 03:00:00 0.788685    1   2021-01-01 02:00:00 2021-01-01 05:30:00
4   2021-01-01 04:00:00 0.505210    1   2021-01-01 02:00:00 2021-01-01 05:30:00
5   2021-01-01 05:00:00 -0.738344   1   2021-01-01 02:00:00 2021-01-01 05:30:00

sliced.groupby('id').val.mean()
>>>
id
1    0.185184
Name: val, dtype: float64

这个结果只包括 id=1 的平均值,但没有 id=2 的值。我将如何而不是平均值包含 id=2 的最后一个可用值,即 -0.349705?

以上是两个日期时间之间的平均值;如果是NaN,则获取最后一个非NaN值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>