使用简单功能在DataFrame上进行fillna

时间:2019-03-11 14:48:46

标签: python pandas dataframe fillna

我正在寻找一种使用简单功能填充[DatFrame] NAs值的方法:[row-1] .value +1。 数据帧的特殊之处在于它一个接一个地具有多个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 个答案:

答案 0 :(得分:2)

您可以尝试以下操作:

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