2015-12-07 37 views
2

這是我的嘗試。例如從不同列中取絕對值的最大值並過濾掉NaN Python

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值,但其絕對值得到highes 0或負值,而不是

結果應與

5 
-2 
4 
3 
+0

解決,當你做'dropna'你失去所有列以'NaN'值只有'C'柱留 –

+0

確定。在任何情況下,如果我使用df.max(axis = 1,key = abs) 它不會取絕對值的最大值,而只是最大的正值 – gis20

回答

0

您可以使用一列平方數據上的np.nanargmax

>>> df.values[range(df.shape[0]),np.nanargmax(df**2,axis=1)] 
array([ 5., -2., 4., 3.]) 
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))]) 
6

我通過

maxCol=lambda x: max(x.min(), x.max(), key=abs) 
df.apply(maxCol,axis=1) 
相關問題