Python 用n-1替换缺少的值

Python 用n-1替换缺少的值,python,pandas,Python,Pandas,比如,我有, df = pd.DataFrame({0: [420, np.nan, 455, np.nan, np.nan, np.nan]}) df 0 0 420.0 1 NaN 2 455.0 3 NaN 4 NaN 5 NaN 然后使用: df[0].isnull().astype(int) 0 0 1 1 2 0 3 1 4 1 5 1 Name: 0, dtype: int64 我明白了 我希望

比如,我有,

df = pd.DataFrame({0: [420, np.nan, 455, np.nan, np.nan, np.nan]})

df

       0
0  420.0
1    NaN
2  455.0
3    NaN
4    NaN
5    NaN
然后使用:

df[0].isnull().astype(int)

0    0
1    1
2    0
3    1
4    1
5    1
Name: 0, dtype: int64
我明白了

我希望得到0,1,0,1,2,3,然后最终:

df[0]=420419455;454453452

groupby
cumcount
df.groupby(df[0].notna().cumsum()).cumcount()

0    0
1    1
2    0
3    1
4    2
5    3
dtype: int64

细节 定义组
df[0].notna().cumsum()

0    1
1    1
2    2
3    2
4    2
5    2
Name: 0, dtype: int64
cumcount一起在
groupby
中使用
df.groupby(df[0].notna().cumsum()).cumcount()

0    0
1    1
2    0
3    1
4    2
5    3
dtype: int64

如果您也可以使用
cumsum

s=df[0].isnull().astype(int).groupby(df[0].notnull().cumsum()).cumsum()
s
Out[430]: 
0    0
1    1
2    0
3    1
4    2
5    3
Name: 0, dtype: int32

#df[0].ffill() - s
s=df[0].isnull().astype(int).groupby(df[0].notnull().cumsum()).cumsum()
s
Out[430]: 
0    0
1    1
2    0
3    1
4    2
5    3
Name: 0, dtype: int32

#df[0].ffill() - s