设为首页收藏本站
天天打卡

 找回密码
 立即注册
搜索
查看: 66|回复: 14

pandas求行最大值及其索引的实现

[复制链接]

1

主题

78

回帖

168

积分

注册会员

积分
168
发表于 2024-4-20 09:45:11 | 显示全部楼层 |阅读模式
在平时训练完模型后,需要对模型预测的值做进一步的数据操作,例如在对模型得到类别的概率值按行取最大值,并将最大值所在的列单独放一列。
数据格式如下:
  1. array
  2. array([[ 0.47288769,  0.23982215,  0.2261405 ,  0.06114962],
  3.        [ 0.67969596,  0.11435176,  0.17647322,  0.02947907],
  4.        [ 0.00621393,  0.01652142,  0.31117165,  0.66609299],
  5.        [ 0.24093366,  0.23636758,  0.30113828,  0.22156043],
  6.        [ 0.44093642,  0.2245989 ,  0.24515967,  0.08930501],
  7.        [ 0.05540339,  0.10013942,  0.30361843,  0.54083872],
  8.        [ 0.11221886,  0.75674808,  0.09237131,  0.03866173],
  9.        [ 0.24885316,  0.28243011,  0.28312165,  0.18559511],
  10.        [ 0.01205211,  0.03740638,  0.271065  ,  0.67947656]], dtype=float32)
复制代码
想在想实现的功能是在上述DataFrame后面增加两列:一列是最大值,一列是最大值所在的行索引。
首先先来了解一下argmax函数。
  1. argmax(a, axis=None)

  2. # a 表示DataFrame

  3. # axis 表示指定的轴,默认是None,表示把array平铺,等于1表示按行,等于0表示按列。
复制代码
对于DataFrame来说,求解过程如下:
代码如下:
  1. #导入库
  2. import pandas as pd
  3. import numpy as np
  4. #将array转化为DataFrame
  5. arr=pd.DataFrame(array,columns=["one","two","three","four"])
  6. #分别求行最大值及最大值所在索引
  7. arr['max_value']=arr.max(axis=1)
  8. arr['max_index']=np.argmax(array,axis=1)
  9. #得出如下结果:
  10. arr
  11. Out[28]:
  12.         one       two     three      four  max_index  max_value
  13. 0  0.472888  0.239822  0.226140  0.061150          0   0.472888
  14. 1  0.679696  0.114352  0.176473  0.029479          0   0.679696
  15. 2  0.006214  0.016521  0.311172  0.666093          3   3.000000
  16. 3  0.240934  0.236368  0.301138  0.221560          2   2.000000
  17. 4  0.440936  0.224599  0.245160  0.089305          0   0.440936
  18. 5  0.055403  0.100139  0.303618  0.540839          3   3.000000
  19. 6  0.112219  0.756748  0.092371  0.038662          1   1.000000
  20. 7  0.248853  0.282430  0.283122  0.185595          2   2.000000
  21. 8  0.012052  0.037406  0.271065  0.679477          3   3.000000
复制代码
假如现在要找出行第二大的值及其索引时,该怎么操作呢:
解决思路:可以将行的最大值置为0,然后在寻找每行的最大值及其索引。
具体代码实现过程如下:
  1. #将最大值置为0
  2. array[arr.index,np.argmax(array,axis=1)]=0
  3. array
  4. array([[ 0.        ,  0.23982215,  0.2261405 ,  0.06114962],
  5.        [ 0.        ,  0.11435176,  0.17647322,  0.02947907],
  6.        [ 0.00621393,  0.01652142,  0.31117165,  0.        ],
  7.        [ 0.24093366,  0.23636758,  0.        ,  0.22156043],
  8.        [ 0.        ,  0.2245989 ,  0.24515967,  0.08930501],
  9.        [ 0.05540339,  0.10013942,  0.30361843,  0.        ],
  10.        [ 0.11221886,  0.        ,  0.09237131,  0.03866173],
  11.        [ 0.24885316,  0.28243011,  0.        ,  0.18559511],
  12.        [ 0.01205211,  0.03740638,  0.271065  ,  0.        ]], dtype=float32)
  13. #取出第二大值及其索引
  14. arr['second_value']=array.max(axis=1)
  15. arr['second_index']=np.argmax(array,axis=1)
  16. arr
  17. Out[208]:
  18.         one       two     three      four  max_value  max_index  second_value  \
  19. 0  0.472888  0.239822  0.226140  0.061150   0.472888          0      0.239822   
  20. 1  0.679696  0.114352  0.176473  0.029479   0.679696          0      0.176473   
  21. 2  0.006214  0.016521  0.311172  0.666093   0.666093          3      0.311172   
  22. 3  0.240934  0.236368  0.301138  0.221560   0.301138          2      0.240934   
  23. 4  0.440936  0.224599  0.245160  0.089305   0.440936          0      0.245160   
  24. 5  0.055403  0.100139  0.303618  0.540839   0.540839          3      0.303618   
  25. 6  0.112219  0.756748  0.092371  0.038662   0.756748          1      0.112219   
  26. 7  0.248853  0.282430  0.283122  0.185595   0.283122          2      0.282430   
  27. 8  0.012052  0.037406  0.271065  0.679477   0.679477          3      0.271065   

  28.    second_index  
  29. 0             1  
  30. 1             2  
  31. 2             2  
  32. 3             0  
  33. 4             2  
  34. 5             2  
  35. 6             0  
  36. 7             1  
  37. 8             2
复制代码
到此这篇关于pandas求行最大值及其索引的实现的文章就介绍到这了,更多相关pandas求行最大值及索引内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

0

主题

53

回帖

107

积分

注册会员

积分
107
发表于 2024-4-29 17:24:29 | 显示全部楼层
嘎嘎嘎嘎嘎嘎嘎

1

主题

52

回帖

124

积分

注册会员

积分
124
发表于 2024-5-1 00:41:02 | 显示全部楼层
保持尊重和礼貌对待其他成员是必要的。

0

主题

53

回帖

118

积分

注册会员

积分
118
发表于 2024-5-16 13:56:48 | 显示全部楼层
已测试,非常不错

0

主题

55

回帖

111

积分

注册会员

积分
111
发表于 2024-6-1 03:18:06 | 显示全部楼层
我不太确定,可能需要再确认一下。

1

主题

59

回帖

141

积分

注册会员

积分
141
发表于 2024-6-24 03:46:40 | 显示全部楼层
确实牛逼

2

主题

51

回帖

128

积分

注册会员

积分
128
发表于 2024-7-19 00:17:01 | 显示全部楼层
已测试,非常不错

0

主题

54

回帖

107

积分

注册会员

积分
107
发表于 2024-7-20 01:06:45 | 显示全部楼层
嘎嘎嘎嘎嘎嘎嘎

0

主题

37

回帖

90

积分

注册会员

积分
90

热心会员付费会员

发表于 2024-8-8 02:44:18 | 显示全部楼层
友善的讨论氛围是非常重要的。

0

主题

67

回帖

135

积分

注册会员

积分
135
发表于 2024-9-6 02:19:02 | 显示全部楼层
看了LZ的帖子,我只想说一句很好很强大!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|爱云论坛 - d.taiji888.cn - 技术学习 免费资源分享 ( 蜀ICP备2022010826号 )|天天打卡

GMT+8, 2024-11-24 08:51 , Processed in 0.103014 second(s), 27 queries .

Powered by i云网络 Licensed

© 2023-2028 正版授权

快速回复 返回顶部 返回列表