大Pandas具有向后和向前看状态的Fillna

2024-04-19 12:05:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一个dataframe,该dataframe有一个包含多个NaN的列,我希望根据以下条件填充该列: 如果向后和向前最多3行,则有2个相等的值,然后用该值填充NaN

由于这一点可能不清楚,下面举几个例子:

  col1                    
0 10    
1 10  
2 NaN
3 NaN
4 NaN
5 10
6 5
7 NaN
8 5
9 NaN
10 NaN
11 NaN
12 NaN
  • 第2行中的值在前1行中有一个10,在前3行中有一个10--&燃气轮机;装满10
  • 第3行中的值在返回的2行中有一个10,在向前的2行中有一个10--&燃气轮机;装满10
  • 第4行中的值在向后的3行中有一个10,在向前的1行中有一个10--&燃气轮机;装满10
  • 第7行中的值在前一行中有一个5,在前一行中有一个5--&燃气轮机;装满5
  • 第9行中的值在向后的1行中有一个5,但在向前的3行中没有5--&燃气轮机;那就别填了

然后,结果如下:

  col1                    
0 10    
1 10  
2 10
3 10
4 10
5 10
6 5
7 5
8 5
9 NaN
10 NaN
11 NaN
12 NaN

是否有任何功能可用于将此逻辑赋予fillna

谢谢


Tags: 功能dataframe逻辑nan条件例子col1fillna
1条回答
网友
1楼 · 发布于 2024-04-19 12:05:44

您可以将正向填充和反向填充Series与限制参数、链掩码与&进行比较,以便按位和仅用于缺少值的行,并将其替换为正向填充列:

m1 = df['col1'].isna()
f = df['col1'].ffill(limit=3)
m2 = f.eq(df['col1'].bfill(limit=3))

df['col2'] = df['col1'].mask(m1 & m2, f)
print (df)
    col1  col2
0   10.0  10.0
1   10.0  10.0
2    NaN  10.0
3    NaN  10.0
4    NaN  10.0
5   10.0  10.0
6    5.0   5.0
7    NaN   5.0
8    5.0   5.0
9    NaN   NaN
10   NaN   NaN
11   NaN   NaN
12   NaN   NaN

相关问题 更多 >