2015-10-28 134 views
1

我有一個數據幀,說:查找最大值和最小值 - 熊貓/ Python的

a b c d e 
a 1 2 3 5 2 
b 2 1 3 4 3 
c 2 4 1 5 6 
d 1 5 6 1 1 
e 2 3 4 1 1 

(1)我需要找到比indicies(我其他最大值和最小值,我)。對於這個例子:我需要得到的解決方案爲Max:6,在(c,e),(d,c)出現2次。對於MIN值也是如此。我如何使用Pandas/Python來做到這一點? (2)同樣,如果指定一行(或一列),我需要獲取除ROW索引(或Col索引)以外的MAX和MIN值。所以,如果我指定了行a,我需要將MAX val取爲5並且出現在(a,b),(a,e)處。謝謝。

+1

由於您無法添加圖片鏈接,因此您上次修改的內容毫無意義,並且最好發佈可複製的文本而不是圖片 – EdChum

+1

爲什麼要將您的數據對稱稱爲對稱? – IanS

回答

0

您可以將您的對角線設置爲空,然後沿着任一軸取最大值或最小值。

例如:

df_copy = df.copy().astype('float') 

for i in range(len(df_copy)): 
    df_copy.iat[i, i] = np.nan 

>>> df_copy 
    a b c d e 
a NaN 2 3 5 2 
b 2 NaN 3 4 3 
c 2 4 NaN 5 6 
d 1 5 6 NaN 1 
e 2 3 4 1 NaN 

>>> df_copy.max(axis=1) # Rows. 
a 5 
b 4 
c 6 
d 6 
e 4 
dtype: float64 

>>> df_copy.max(axis=0) # Columns. 
a 2 
b 5 
c 6 
d 5 
e 6 
dtype: float64 

既然你指數等於欄位,並都以相同的順序,就可以得到最大的列/索引值進行排序/分鐘值如下:

>>> [df.index.get_loc(k) for k in df_copy.idxmax(axis=1)] # Rows. 
[3, 3, 4, 2, 2] 

>>> [df.index.get_loc(k) for k in df_copy.idxmax(axis=0)] # Columns. 
[1, 3, 3, 0, 2] 

請注意,您可以有多個值等於最大值(與本示例一樣),但是idxmax只會返回第一個值。

+0

非常感謝,亞歷山大先生。任何其他部分的建議? - 查找出現的頻率並提取最大值和最小值的相應座標。 – Birdie

+0

是的,謝謝。 get_loc返回整數索引。我正在尋找字符串索引。我猜可以將其映射回來。 – Birdie

+0

哈!我花了一點時間來找出整數索引。字符串索引很容易。 'df_copy.idxmax(軸= ...)' – Alexander