pandas 在整个 Dataframe 中查找最大值和相应的列/索引名称

scyqe7ek  于 2023-05-27  发布在  其他
关注(0)|答案(4)|浏览(216)

我想选择 Dataframe 中的最大值,然后找出该值的索引和列名。有办法吗?
比如,在下面的示例中,我想首先找到最大值(31),然后返回该值(20, R20D)的索引和列名

a = pd.DataFrame({'R05D':[1,2,3],'R10D':[7,4,3],'R20D':[31,2,4]},index=[20,25,30])

谢谢!

fzsnzjdm

fzsnzjdm1#

虽然这超出了OP的要求,但如果你需要找到前n个(例如:3)值,你可以做:

a.stack().sort_values(ascending=False).head(3)

这给了你一个新的有序df,原始的(index,column)作为新的MultiIndex:

20  R20D    31
    R10D     7
25  R10D     4

tail(2)同样会给予最低的2个值。

pprl5pva

pprl5pva2#

如果你调用a.max(axis=0),你会得到每一列上的一系列max:

R05D     3
R10D     7
R20D    31
dtype: int64

如果你调用max,你会得到它的最大值,所以:

a.max(axis=0).max()
#31

给你最大的价值。类似地:

a.max(axis=0).idxmax()
#R20D

为您提供列名称和

a.max(axis=1).idxmax()
#20

会给予你一排。

7kqas0il

7kqas0il3#

将你的 Dataframe 转换成一个MultipleIndex Series,并使用idxmax函数请求max元素的索引:

coord = a.stack().idxmax()
coord
(20, 'R20D')

要获得该值,请使用loc的坐标:

df.loc[coord]
31

要获取数字索引,可以使用a.stack().argmax()

3htmauhk

3htmauhk4#

由于我的名气有限,无法发表评论,以下是对@Boud的回答的额外回答:对于我来说,使用argmax()并不起作用,但是使用idxmax()解决了这个问题,并返回了(20, "R20D")的正确输出

coord = a.stack().idxmax()
coord
(20, 'R20D')

相关问题