Ниже я покажу вам, как это сделать на примере. С одной стороны, Series.notna
+ Series.cumsum
+ Series.shift
- этоиспользуется для группировки последовательных значений NaN
через groupby
. Используя transform
, вы получаете логический ряд с False
в тех группах , которые имеют более одного NaN
. AND
операция этой логической серии с результирующей серией df2['col2']. isna()
- это серия, которую мы ищем, чтобы выполнить Boolean indexing
и выбрать те строки, где есть NaN, но не последовательно
df=pd.DataFrame({'col1':[1,2,3,4,5,6,7,8,9,10],'col2':[np.nan,2,3,np.nan,np.nan,6,np.nan,8,9,np.nan]})
print(df)
col1 col2
0 1 NaN
1 2 2.0
2 3 3.0
3 4 NaN
4 5 NaN
5 6 6.0
6 7 NaN
7 8 8.0
8 9 9.0
9 10 NaN
mask_repeat_NaN=df.groupby(df['col2'].notna().cumsum())['col2'].transform('size').le(2)
mask=mask_repeat_NaN&df['col2'].isna()
df_filtered=df[mask]
print(df_filtered)
col1 col2
0 1 NaN
6 7 NaN
9 10 NaN