9

这是我的尝试。例如

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)

过滤掉NaN值,但它得到 0 或负值,而不是绝对值的最高值

结果应该是一列

5
-2
4
3
4

5 回答 5

12

我解决了

maxCol=lambda x: max(x.min(), x.max(), key=abs)
df.apply(maxCol,axis=1)
于 2015-12-07T11:01:03.243 回答
4

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

>>> df.values[range(df.shape[0]),np.nanargmax(df**2,axis=1)]
array([ 5., -2.,  4.,  3.])
于 2015-12-07T10:32:22.493 回答
3

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

df.abs().max()

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

于 2020-11-11T20:12:30.993 回答
1
df = df.fillna(0)
l = df.abs().values.argmax(axis=1)
pd.Series([df.values[i][l[i]] for i in range(len(df.values))])

In [532]: pd.Series([df.values[i][l[i]] for i in range(len(df.values))])
Out[532]:
0    5
1   -2
2    4
3    3
dtype: float64

一个班轮:

pd.Series([df.values[i][df.fillna(0).abs().values.argmax(axis=1)[i]] for i in range(len(df.values))])
于 2015-12-07T10:57:37.523 回答
-1

由于我的声誉得分较低,我想在此处添加gis20的答案和 Andrew Hamel 关于绝对最小值的问题:

minCol=lambda x: min(x, key=abs)
minCol=lambda x: min([abs(value) for value in x])  

适用于我的数据,但是,它无法处理 np.nan 的。

于 2020-08-20T10:01:43.073 回答