我想选择 Dataframe 中的最大值,然后找出该值的索引和列名。有办法吗?比如,在下面的示例中,我想首先找到最大值(31),然后返回该值(20, R20D)的索引和列名
31
(20, R20D)
a = pd.DataFrame({'R05D':[1,2,3],'R10D':[7,4,3],'R20D':[31,2,4]},index=[20,25,30])
谢谢!
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个值。
tail(2)
pprl5pva2#
如果你调用a.max(axis=0),你会得到每一列上的一系列max:
a.max(axis=0)
R05D 3 R10D 7 R20D 31 dtype: int64
如果你调用max,你会得到它的最大值,所以:
max
a.max(axis=0).max() #31
给你最大的价值。类似地:
a.max(axis=0).idxmax() #R20D
为您提供列名称和
a.max(axis=1).idxmax() #20
会给予你一排。
7kqas0il3#
将你的 Dataframe 转换成一个MultipleIndex Series,并使用idxmax函数请求max元素的索引:
idxmax
coord = a.stack().idxmax() coord (20, 'R20D')
要获得该值,请使用loc的坐标:
loc
df.loc[coord] 31
要获取数字索引,可以使用a.stack().argmax()
a.stack().argmax()
3htmauhk4#
由于我的名气有限,无法发表评论,以下是对@Boud的回答的额外回答:对于我来说,使用argmax()并不起作用,但是使用idxmax()解决了这个问题,并返回了(20, "R20D")的正确输出
argmax()
idxmax()
(20, "R20D")
4条答案
按热度按时间fzsnzjdm1#
虽然这超出了OP的要求,但如果你需要找到前n个(例如:3)值,你可以做:
这给了你一个新的有序df,原始的(index,column)作为新的MultiIndex:
tail(2)
同样会给予最低的2个值。pprl5pva2#
如果你调用
a.max(axis=0)
,你会得到每一列上的一系列max:如果你调用
max
,你会得到它的最大值,所以:给你最大的价值。类似地:
为您提供列名称和
会给予你一排。
7kqas0il3#
将你的 Dataframe 转换成一个MultipleIndex Series,并使用
idxmax
函数请求max元素的索引:要获得该值,请使用
loc
的坐标:要获取数字索引,可以使用
a.stack().argmax()
3htmauhk4#
由于我的名气有限,无法发表评论,以下是对@Boud的回答的额外回答:对于我来说,使用
argmax()
并不起作用,但是使用idxmax()
解决了这个问题,并返回了(20, "R20D")
的正确输出