有没有办法以列表格式将数据框中的缺失值填充为上一行中列表的最后一个值?

时间:2019-09-06 09:50:45

标签: python pandas list dataframe

此刻,我有一个数据框架,如下所示:

    date         B  C   D   E
0   04/06/2019  258 994 761 [1, 46, 36, 7457, 456]
1   05/06/2019  748 181 565 [22, 3453, 45]
2   06/06/2019  357 290  98 []
2   07/06/2019  185 876 107 [4976, 46, 57, 7, 3]
3   08/06/2019  241 386 728 [4, 6457, 4]
4   09/06/2019  516 579 596 [65]
5   10/06/2019   96 579 596 []
6   11/06/2019  847 109 279 []

我需要实现的是:

    date         B  C   D   E
0   04/06/2019  258 994 761 [1, 46, 36, 7457, 456]
1   05/06/2019  748 181 565 [22, 3453, 45]
2   06/06/2019  357 290  98 [45]
2   07/06/2019  185 876 107 [4976, 46, 57, 7, 3]
3   08/06/2019  241 386 728 [4, 6457, 4]
4   09/06/2019  516 579 596 [65]
5   10/06/2019   96 579 596 [65]
6   11/06/2019  847 109 279 [65]

我知道对于数字数据,我可以使用类似这样的东西:

df.E = df.E.fillna(method='ffill')

但是我现在不知道该怎么做。你能帮我吗?

1 个答案:

答案 0 :(得分:2)

首先获取列表的最后一个值,然后向前填充缺失值:

s = df.E.apply(lambda x: [x[-1]] if len(x) > 0 else np.nan)

df.E = df.E.mask(s.isna(), s.ffill())
print (df)
         date    B    C    D                       E
0  04/06/2019  258  994  761  [1, 46, 36, 7457, 456]
1  05/06/2019  748  181  565          [22, 3453, 45]
2  06/06/2019  357  290   98                    [45]
2  07/06/2019  185  876  107    [4976, 46, 57, 7, 3]
3  08/06/2019  241  386  728            [4, 6457, 4]
4  09/06/2019  516  579  596                    [65]
5  10/06/2019   96  579  596                    [65]
6  11/06/2019  847  109  279                    [65]