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
我得到的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