pandas fillna 在行的子集中

pandas fillna in subset of rows

我得到的df如下:

   a    b
0  1  NaN
1  2  NaN
2  1  1.0
3  4  NaN
4  9  1.0
5  6  NaN
6  5  2.0
7  8  NaN
8  9  2.0

我只想在数字之间填充 nan 以获得这样的 df:

   a    b
0  1  NaN
1  2  NaN
2  1  1.0
3  4  1.0
4  9  1.0
5  6  NaN
6  5  2.0
7  8  2.0
8  9  2.0

然后创建两个新数据框:

   a    b
2  1  1.0
3  4  1.0
4  9  1.0
   a    b
6  5  2.0
7  8  2.0
8  9  2.0

意思是 select 所有列和行都只填写了 nan。

我对第一部分的想法是,填写 nan 是创建单独的数据框,其中的行索引如下:

2 1.0
4 1.0
6 2.0
8 2.0

并基于此创建要填写的行索引范围。

我的问题是,与这部分相关的替换 nan 可能有更多 pythonic 函数来执行此操作。

怎么样

df[df.b.ffill()==df.b.bfill()].ffill()

结果

#    a    b
# 2  1  1.0
# 3  4  1.0
# 4  9  1.0
# 6  5  2.0
# 7  8  2.0
# 8  9  2.0

解释:

df['c'] = df.b.ffill()
df['d'] = df.b.bfill()

#    a    b    c    d
# 0  1  NaN  NaN  1.0
# 1  2  NaN  NaN  1.0
# 2  1  1.0  1.0  1.0
# 3  4  NaN  1.0  1.0
# 4  9  1.0  1.0  1.0
# 5  6  NaN  1.0  2.0
# 6  5  2.0  2.0  2.0
# 7  8  NaN  2.0  2.0
# 8  9  2.0  2.0  2.0