重新采样时,如果源间隔中有一些NaN值,则将NaN放入结果值

时间:2019-01-18 10:32:51

标签: python pandas series

示例:

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
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
ts.resample("5min").sum()
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

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

或者,如果间隔中有一个缺失值,或者如果间隔中有两个缺失值,我想让它为NaN。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

对于一个或多个NaN值:

ts.resample('5min').agg(pd.Series.sum, skipna=False)

对于2个非NaN值的最小值

ts.resample('5min').agg(pd.Series.sum, min_count=2)

对于2个NaN值的最大值似乎比较棘手:

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

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