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