замените пропущенное значение на n-1 - PullRequest
0 голосов
/ 28 сентября 2018

например: у меня есть,

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[0].fillna(method='ffill') - df[0].isnull().astype(int)

0    420.0
1    419.0
2    455.0
3    454.0
4    454.0
5    454.0
Name: 0, dtype: float64

Я ищу, чтобы получить 0,1, 0,1,2,3, затем в конце:

df [0] = 420, 419, 455;454 453, 452

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Если вы можете использовать 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
0 голосов
/ 28 сентября 2018

groupby, cumcount

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

0    420.0
1    419.0
2    455.0
3    454.0
4    453.0
5    452.0
dtype: float64

Подробности

Определить группы
df[0].notna().cumsum()

0    1
1    1
2    2
3    2
4    2
5    2
Name: 0, dtype: int64
Использовать в groupby с cumcount
df.groupby(df[0].notna().cumsum()).cumcount()

0    0
1    1
2    0
3    1
4    2
5    3
dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...