使用简单函数在 DataFrame 上填充

fillna on DataFrame with a simple function

我正在寻找一种使用简单函数填充 DatFrame 的 NA 值的方法:[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

您可以尝试这样的操作:

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