假设我们有一个包含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的方式?
答案 0 :(得分:0)
如果列数变量,我们可以使用:
reduce(lambda series, col: series.fillna(df[col]),
df.columns[1:], df[df.columns[0]])
它连续填充第一列中的值,第二列,然后是第三列,依此类推。
(这是基于上面的@ behzad.nouri解决方案。)