2014-07-15 19 views
2

我是新編程新手,希望我能清楚地問我的問題,也許您可​​以引導我找到答案。熊貓:在數據框的所有列中查找最大範圍

我有一個數據框「x」,其中索引代表一年中的一週,每列代表一個城市的數值。我試圖找到具有最大範圍的列(即:最大值 - 最小值)。我可以想象這需要一個循環來查找每列的最大值和最小值,將其作爲一個對象(或者作爲一個新的行放在底部?),然後在該對象(或行)中找到最大值。

數據幀是這樣的:對禮儀或措辭

 City1 City2 ... CityN 
week 
1 
2 
3 
4 
... 
53 

反饋也表示讚賞。

+0

只是爲了澄清,你的意思是你想找到最大值爲'max(col)-min(col)'的列嗎? – DSM

+0

是的。範圍如下:範圍(col_i)=最大(col_i) - 最小(col_i)。 – HolaGonzalo

回答

3

(df.max() - df.min()).idxmax()的東西應該給你一個最大列:

>>> df = pd.DataFrame(np.random.random((5,4)), index=pd.Series(range(1,6), name="week"), columns=["City{}".format(i) for i in range(1,5)]) 
>>> df 
     City1  City2  City3  City4 
week           
1  0.908549 0.496167 0.220340 0.464060 
2  0.429330 0.770133 0.824774 0.155694 
3  0.893270 0.980108 0.574897 0.378443 
4  0.982410 0.796103 0.080877 0.416432 
5  0.444416 0.667695 0.459362 0.898792 
>>> df.max() - df.min() 
City1 0.553080 
City2 0.483941 
City3 0.743898 
City4 0.743098 
dtype: float64 
>>> (df.max() - df.min()).idxmax() 
'City3' 
>>> df[(df.max() - df.min()).idxmax()] 
week 
1  0.220340 
2  0.824774 
3  0.574897 
4  0.080877 
5  0.459362 
Name: City3, dtype: float64 

如果有可能,在最大範圍內多於一個列,你可能要像

>>> col_ranges = df.max() - df.min() 
>>> df.loc[:,col_ranges == col_ranges.max()] 
     City3 
week   
1  0.220340 
2  0.824774 
3  0.574897 
4  0.080877 
5  0.459362 

代替。