根据熊猫中的特定条件填充NaN值

时间:2020-07-15 06:54:32

标签: python-3.x pandas

我有一个如下所示的数据框

Date                t_factor     t1         t2         t3       t_function
2020-02-01             5          4         NaN        NaN      4
2020-02-03             23         6         NaN        NaN      6
2020-02-06             14         9         NaN        NaN      9
2020-02-09             23         NaN       NaN        NaN      0
2020-02-10             23         NaN       NaN        NaN      0
2020-02-11             23         NaN       NaN        NaN      0
2020-02-13             30         NaN       3          NaN      3   
2020-02-20             29         NaN       66         NaN      66
2020-02-29             100        NaN       291        NaN      291
2020-03-01             38         NaN       NaN        NaN      0
2020-03-10             38         NaN       NaN        NaN      0
2020-03-11             38         NaN       NaN        4        4 
2020-03-26             70         NaN       NaN        4        4
2020-03-29             70         NaN       NaN        4        4

我想在非NaN值之后填充NaN值作为该列的最后一个NaN值

我要在其中插入的列是t1,t2和t3。

预期产量

Date                t_factor     t1       t2         t3       t_function
2020-02-01             5          4       NaN        NaN      4
2020-02-03             23         6       NaN        NaN      6
2020-02-06             14         9       NaN        NaN      9
2020-02-09             23         9       NaN        NaN      0
2020-02-10             23         9       NaN        NaN      0
2020-02-11             23         9       NaN        NaN      0
2020-02-13             30         9       3          NaN      3   
2020-02-20             29         9       66         NaN      66
2020-02-29             100        9       291        NaN      291
2020-03-01             38         9       291        NaN      0
2020-03-10             38         9       291        NaN      0
2020-03-11             38         9       291        4        4 
2020-03-26             70         9       291        4        4
2020-03-29             70         9       291        4        4

3 个答案:

答案 0 :(得分:1)

我们可以为此定义一个函数

def imporove(iterable):
    for i in range(len(iterable)):
        if iterable[i].isnull() == True:
            iterable[i] = iterable[i-1]

我希望您有一个基本的想法。 现在你可以通过 df['t1'].apply(improve)

答案 1 :(得分:1)

这就是我要去的地方:

def fill_na(col):
    ind = df[col].last_valid_index()    
    df[col][ind+1:].fillna(df[col][ind], inplace=True)

fill_na('t1')
fill_na('t2')
fill_na('t3')

答案 2 :(得分:1)

使用ffill

df[['t1', 't2', 't3']] = df[['t1', 't2', 't3']].ffill()

结果:

          Date  t_factor   t1     t2   t3  t_function
0   2020-02-01         5  4.0    NaN  NaN           4
1   2020-02-03        23  6.0    NaN  NaN           6
2   2020-02-06        14  9.0    NaN  NaN           9
3   2020-02-09        23  9.0    NaN  NaN           0
4   2020-02-10        23  9.0    NaN  NaN           0
5   2020-02-11        23  9.0    NaN  NaN           0
6   2020-02-13        30  9.0    3.0  NaN           3
7   2020-02-20        29  9.0   66.0  NaN          66
8   2020-02-29       100  9.0  291.0  NaN         291
9   2020-03-01        38  9.0  291.0  NaN           0
10  2020-03-10        38  9.0  291.0  NaN           0
11  2020-03-11        38  9.0  291.0  4.0           4
12  2020-03-26        70  9.0  291.0  4.0           4
13  2020-03-29        70  9.0  291.0  4.0           4