从对称数据帧中查找最大值和最小值-Pandas/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) 我需要找到除标记(I,I)之外的最大值和最小值。对于这个例子:我需要得到Max:6的解,在(c,e),(d,c)处出现2次。MIN值也是如此。如何使用Pandas/Python实现这一点?

(2) 类似地,如果指定一行(或一列),我需要获取除row索引(或Col索引)之外的MAX和MIN值。所以,如果我指定行a,我需要将MAX val设为5,并出现在(a,b),(a,e)。谢谢

您可以将对角线设置为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

假设您的索引等于您的列,并且两者按相同的顺序排序,您可以获得最大/最小值的列/索引值,如下所示:

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

最新更新