заполнить на DataFrame с простой функцией - PullRequest
0 голосов
/ 11 марта 2019

Я ищу способ заполнения значений NA для DatFrame с помощью простой функции: [row-1] .value +1.Особенность dataframe заключается в том, что он имеет несколько NA один за другим.

Вот пример типа DataFrame, с которым я имею дело:

import pandas as pd
import numpy as np
df = pd.DataFrame({'a':[7, 3, 12, 0, np.nan, np.nan], 
                   'b':[0, 4, 8, np.nan, np.nan, np.nan], 
                   'c':[1, 2, 1, 4, 1, 1]})

Out[7]: 
      a    b    c
0   7.0  0.0  1.0
1   3.0  4.0  2.0
2  12.0  8.0  1.0
3   0.0  NaN  4.0
4   NaN  NaN  1.0
5   NaN  NaN  1.0

Вот вывод, который я хотел быхотел бы получить:

Out[7]: 
      a     b     c
0   7.0   0.0   1.0
1   3.0   4.0   2.0
2  12.0   8.0   1.0
3   0.0   9.0   4.0
4   1.0  10.0   1.0
5   2.0  11.0   1.0

1 Ответ

2 голосов
/ 11 марта 2019

Вы можете попробовать что-то вроде этого:

import pandas as pd
import numpy as np

df=pd.DataFrame({'a':[1, 2, np.nan, np.nan, 5, np.nan, 7]})
df

     a
0  1.0
1  2.0
2  NaN
3  NaN
4  5.0
5  NaN
6  7.0

df['a'] = df.groupby(df['a'].notnull().cumsum()).cumcount() + df['a'].ffill()
df

     a
0  1.0
1  2.0
2  3.0
3  4.0
4  5.0
5  6.0
6  7.0

Обновление для вашего фрейма данных

df = pd.DataFrame({'a':[7, 3, 12, 0, np.nan, np.nan], 
                   'b':[0, 4, 8, np.nan, np.nan, np.nan], 
                   'c':[1, 2, 1, 4, 1, 1]})

df_out = df.apply(lambda x: x.groupby(x.notnull().cumsum()).cumcount() + x.ffill())

Вывод:

      a     b  c
0   7.0   0.0  1
1   3.0   4.0  2
2  12.0   8.0  1
3   0.0   9.0  4
4   1.0  10.0  1
5   2.0  11.0  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...