用另一列填充Pandas列的最Pythonic方法
假设我们有一个数据表,里面有两列或更多的数字数据。例如:
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上面的解决方案。)