Mat*_* W. 7 python dataframe pandas
我正在尝试从数据帧中的多个pandas系列中获取第一个非null值.
df = pd.DataFrame({'a':[2, np.nan, np.nan, np.nan],
'b':[np.nan, 5, np.nan, np.nan],
'c':[np.nan, 55, 13, 14],
'd':[np.nan, np.nan, np.nan, 4],
'e':[12, np.nan, np.nan, 22],
})
a b c d e
0 2.0 NaN NaN NaN 12.0
1 NaN 5.0 55.0 NaN NaN
2 NaN NaN 13.0 NaN NaN
3 NaN NaN 14.0 4.0 22.0
Run Code Online (Sandbox Code Playgroud)
在这里df我想创建一个新列'f',并将其设置为'a'如果a不为null,'b'如果b不为null等等.
我可以做一堆效率低下的np.where语句.
df['f'] = np.where(df.a.notnull(), df.a,
np.where(df.b.notnull(), df.b,
etc.))
Run Code Online (Sandbox Code Playgroud)
我调查df.a or df.b or df.c等等
结果应该是这样的:
a b c d e f
0 2.0 NaN NaN NaN 12.0 2
1 NaN 5.0 55.0 NaN NaN 5
2 NaN NaN 13.0 NaN NaN 13
3 NaN NaN 14.0 4.0 22.0 14
Run Code Online (Sandbox Code Playgroud)
一个解决方案
df.groupby(['f']*df.shape[1], axis=1).first()
Out[385]:
f
0 2.0
1 5.0
2 13.0
3 14.0
Run Code Online (Sandbox Code Playgroud)
其他
df.bfill(1)['a']
Out[388]:
0 2.0
1 5.0
2 13.0
3 14.0
Name: a, dtype: float64
Run Code Online (Sandbox Code Playgroud)