从不同列中获取绝对值的最大值并过滤掉NaN Python

gis*_*s20 6 python max nan absolute-value pandas

这是我的尝试.例如

df = pd.DataFrame({'a':[5,0,1,np.nan], 'b':[np.nan,1,4,3], 'c':[-3,-2,0,0]})
df.dropna(axis=1).max(axis=1,key=abs)
Run Code Online (Sandbox Code Playgroud)

过滤掉这些NaN值,但它的值为0或负值,而不是绝对值的高值

结果应该是一列

5
-2
4
3
Run Code Online (Sandbox Code Playgroud)

gis*_*s20 10

我解决了

maxCol=lambda x: max(x.min(), x.max(), key=abs)
df.apply(maxCol,axis=1)
Run Code Online (Sandbox Code Playgroud)


Bre*_*dan 9

最直接有效的方法就是转换为绝对值,然后求最大值。Pandas 通过简单的语法(absmax)支持这一点,并且不需要昂贵的应用操作:

df.abs().max()
Run Code Online (Sandbox Code Playgroud)

max()接受一个axis参数,该参数可用于指定是否计算行或列的最大值。

  • 这不会回答所提出的问题,因为它消除了负值。 (3认同)

tho*_*as 5

您可以使用np.nanargmax平方数据:

>>> df.values[range(df.shape[0]),np.nanargmax(df**2,axis=1)]
array([ 5., -2.,  4.,  3.])
Run Code Online (Sandbox Code Playgroud)