I have a dataframe like the following:
import pandas as pd
data={'col1':[1,3,3,1,2,3,2,2, 1], 'col2':[np.nan, 1, np.nan, 1, np.nan, np.nan, np.nan, 2, np.nan]}
df=pd.DataFrame(data,columns=['col1', 'col2'])
print df
col1 col2
0 1 NaN
1 3 1.0
2 3 NaN
3 1 1.0
4 2 NaN
5 3 NaN
6 2 NaN
7 2 2.0
8 1 NaN
我正在尝试创建第三列,以填充col2
中的NaN值,如果col2
的值等于1.0
或上一行中的col2
为1.0
。 最终的数据框应该像这样:
col1 col2 col3
0 1 NaN NaN
1 3 1.0 1.0
2 3 NaN 1.0
3 1 1.0 1.0
4 2 NaN 1.0
5 3 NaN 1.0
6 2 NaN 1.0
7 2 2.0 2.0
8 1 NaN NaN
我尝试的第一种方法是:
df ['col3'] = ((df ['col2']== 1) | ((df ['col2'].shift()== 1))). astype ('int')
这会让我得到这个数据框:
col1 col2 col3
0 1 NaN 0
1 3 1.0 1
2 3 NaN 1
3 1 1.0 1
4 2 NaN 1
5 3 NaN 0
6 2 NaN 0
7 2 2.0 0
8 1 NaN 0
这段代码可以纠正第一个缺失值,但不能继续填充后续的缺失值。我还尝试使用 np.where()
函数,但结果相同。
有没有一种方法可以在 pandas 中编写代码,以便可以连续修复多个连续的缺失值?