重采样时,如果源区间中有一些 NaN 值,则将 NaN 放在结果值中

Ant*_*des 4 python series pandas

例子:

import pandas as pd
import numpy as np

rng = pd.date_range("2000-01-01", periods=12, freq="T")
ts = pd.Series(np.arange(12), index=rng)
ts["2000-01-01 00:02"] = np.nan
ts
Run Code Online (Sandbox Code Playgroud)
2000-01-01 00:00:00     0.0
2000-01-01 00:01:00     1.0
2000-01-01 00:02:00     NaN
2000-01-01 00:03:00     3.0
2000-01-01 00:04:00     4.0
2000-01-01 00:05:00     5.0
2000-01-01 00:06:00     6.0
2000-01-01 00:07:00     7.0
2000-01-01 00:08:00     8.0
2000-01-01 00:09:00     9.0
2000-01-01 00:10:00    10.0
2000-01-01 00:11:00    11.0
Freq: T, dtype: float64
Run Code Online (Sandbox Code Playgroud)
ts.resample("5min").sum()
Run Code Online (Sandbox Code Playgroud)
2000-01-01 00:00:00     5.0
2000-01-01 00:05:00    30.0
2000-01-01 00:10:00    30.0
Freq: 5T, dtype: float64
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,它提取区间 00:00-00:05 的总和,就好像缺失值为零一样。我想要的是它在 00:00 产生结果 NaN。

或者,如果间隔中有一个缺失值,我可能希望它没问题,但如果间隔中有两个缺失值,则为 NaN。

我该怎么做?

jpp*_*jpp 6

对于一个或多个NaN值:

ts.resample('5min').agg(pd.Series.sum, skipna=False)
Run Code Online (Sandbox Code Playgroud)

对于至少2 个非NaN值:

ts.resample('5min').agg(pd.Series.sum, min_count=2)
Run Code Online (Sandbox Code Playgroud)

对于最多2 个NaN值似乎更棘手:

ts.resample('5min').apply(lambda x: x.sum() if x.isnull().sum() <= 2 else np.nan)
Run Code Online (Sandbox Code Playgroud)

您可能希望ts.resample('5min').sum(skipna=False)以与 相同的方式工作ts.sum(skipna=False),但实现方式不一致。