我有一个数据框,说:
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)。谢谢。
答案 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
只返回第一个值。