我有一个数据帧,比如:
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
只返回第一个值。