这是我的尝试。例如
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
答案 0 :(得分:9)
我解决了
maxCol=lambda x: max(x.min(), x.max(), key=abs)
df.apply(maxCol,axis=1)
答案 1 :(得分:0)
您可以对平方数据使用np.nanargmax
:
>>> df.values[range(df.shape[0]),np.nanargmax(df**2,axis=1)]
array([ 5., -2., 4., 3.])
答案 2 :(得分:0)
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))])
答案 3 :(得分:0)
由于我的声誉得分很低,我想在此补充gis20的答案以及安德鲁·哈默尔(Andrew Hamel)有关绝对最小值的问题:
minCol=lambda x: min(x, key=abs)
minCol=lambda x: min([abs(value) for value in x])
适用于我的数据,但是不能应付np.nan的数据。
答案 4 :(得分:0)