从对称数据框中查找最大值和最小值 - Pandas / Python

时间:2015-10-28 15:37:58

标签: python-2.7 pandas

我有一个数据框,说:

  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)我需要找到除指标(i,i)以外的MAX和MIN值。对于这个例子:我需要得到Max:6的解决方案,在(c,e),(d,c)发生2次。同样对于MIN值也是如此。我如何使用Pandas / Python做到这一点?

(2)同样,如果指定一行(或一列),我需要获得除ROW索引(或Col索引)以外的MAX和MIN值。所以,如果我指定行a,我需要得到MAX val为5并且出现在(a,b),(a,e)。谢谢。

1 个答案:

答案 0 :(得分:0)

您可以将对角线设置为null,然后沿任一轴取最大值或最小值。

例如:

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

鉴于您的索引等于您的列并且两者都以相同的顺序排序,您可以获得max / min值的列/索引值,如下所示:

>>> [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只返回第一个值。