大多数Pythonic方式从另一列填充熊猫专栏

时间:2014-03-14 22:27:25

标签: python pandas

假设我们有一个包含2列或更多列数字数据的数据框。 e.g。

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

如果b不是NaN,我想用列b中的值填充a列中的NaN值,否则填充c列中的值。

即。 df成为

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

最明显的方法是循环遍历行然后循环遍历列,但是什么是更加pythonic的方式?

1 个答案:

答案 0 :(得分:0)

如果列数变量,我们可以使用:

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

它连续填充第一列中的值,第二列,然后是第三列,依此类推。

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