【发布时间】:2019-03-27 17:18:17
【问题描述】:
我有一个带有变量“A”的数据框,我想创建一个滚动 Nan 检查器,这样如果所有 3 个(秒)单元格(当前单元格和前两个单元格),新变量“rolling_nan”= 1 ) 是 NaN,否则 "rolling_nan" = 0。
我正在应用一个函数,因为 .rolling pandas 函数不支持 isna()。但是我得到以下内容。另外我不确定如何在 NaN 检查器中包含相同的行值。
import pandas as pd
import numpy as np
idx = pd.date_range('2018-01-01', periods=10, freq='S')
df = pd.DataFrame({"A":[1,2,3,np.nan,np.nan,np.nan,6,7,8,9]}, index = idx)
df
def isna_func(x):
return 1 if pd.isna(x).all() == True else 0
df['rolling_nan'] = df['A'].rolling(3).apply(isna_func)
df
A rolling_nan
2018-01-01 00:00:00 1.0 NaN
2018-01-01 00:00:01 2.0 NaN
2018-01-01 00:00:02 3.0 0.0
2018-01-01 00:00:03 NaN NaN
2018-01-01 00:00:04 NaN NaN
2018-01-01 00:00:05 NaN NaN
2018-01-01 00:00:06 6.0 NaN
2018-01-01 00:00:07 7.0 NaN
2018-01-01 00:00:08 8.0 0.0
2018-01-01 00:00:09 9.0 0.0
在上面的示例中,rolling_nan 应仅在时间戳 2018-01-01 00:00:05 处等于 1,否则为 0。
【问题讨论】:
标签: pandas apply nan rolling-computation