用另一列填充Pandas列的最Pythonic方法

3 投票
1 回答
643 浏览
提问于 2025-04-17 22:23

假设我们有一个数据表,里面有两列或更多的数字数据。例如:

df = pd.DataFrame( {'a':linspace(1,10,10), 'b':linspace(11,20,10), 'c':linspace(21,30,10)})

df['a'][3]=None
df['b'][3]=None
df['a'][2]=None

df
Out[98]: 
    a   b   c
0   1  11  21
1   2  12  22
2 NaN  13  23
3 NaN NaN  24
4   5  15  25
5   6  16  26
6   7  17  27
7   8  18  28
8   9  19  29
9  10  20  30

我想把列a中的空值(NaN)用列b中的值填充,如果列b的值不是空的;如果列b也是空的,就用列c中的值。

也就是说,数据表会变成这样:

df
Out[102]: 
    a   b   c
0   1  11  21
1   2  12  22
2  13  13  23
3  24 NaN  24
4   5  15  25
5   6  16  26
6   7  17  27
7   8  18  28
8   9  19  29
9  10  20  30

最简单的方法就是逐行逐列地循环,但有没有更符合Python风格的方法呢?

1 个回答

0

如果列的数量是可变的,我们可以使用这个方法:

reduce(lambda series, col: series.fillna(df[col]),
       df.columns[1:], df[df.columns[0]])

这个方法会依次用第二列的值填充第一列,然后是第三列,依此类推。

(这是基于@behzad.nouri上面的解决方案。)

撰写回答