python - 对于pandas中的每个标签,如何获取与基于标签的值子集中的最大值相关联的ID?
问题描述
所以我认为这个问题可以最好地可视化如下,给定一个数据框:
val_1 true_val ID label
-0.0127894447 0.0 1 A
0.9604560385 1.0 2 A
0.0001271985 0.0 3 A
0.0007419337 0.0 3 B
0.3420448566 0.0 2 B
0.1322384726 1.0 4 B
所以我想要得到的是:
val_1 true_val label ID_val_1_highest ID_true_val_highest
0.9604560385 1.0 A 2 2
0.3420448566 1.0 B 2 4
或者更可取的是,只有最后两列(所以只有 ID,所以我可以计算精度和召回率)
我想获取 val_1 和 true_val 都具有最高值的 ID,然后为每个标签返回两个相应的 ID。
任何人都知道如何做到这一点?我试过了:
df.sort_values('val_1', ascending=False).drop_duplicates(['label'])
但对于两个值,它都不会返回与标签 X 的最大值关联的 ID。注意:ID 可以在“ID”列中出现多次。
解决方案
使用DataFrameGroupBy.idxmax
with convert ID
to index for ID
by 最大值val1
和true_val
列,最后添加到第一个DataFrame
by DataFrame.join
:
df1 = df.sort_values('true_val', ascending=False).drop_duplicates(['label'])
print (df1)
val_1 true_val ID label
1 0.960456 1.0 2 A
5 0.132238 1.0 6 B
df2 = df.set_index('ID').groupby('label').idxmax().add_suffix('_highest')
print (df2)
val_1_highest true_val_highest
label
A 2 2
B 5 6
df = df1.join(df2, on='label')
print (df)
val_1 true_val ID label val_1_highest true_val_highest
1 0.960456 1.0 2 A 2 2
5 0.132238 1.0 6 B 5 6
推荐阅读
- python - 迁移期间的 Django 日志记录
- java - 即使 wifi 关闭也“已连接”
- python - NameError 指出字典不存在,但它确实存在
- java - 默认构造函数链
- python - Python 虚拟键盘——三键表达式 Ctrl-Shift-Home 的问题
- docker - Docker 运行:传递原始环境变量
- arrays - 如何使用 jq 将数组拆分为块?
- scala - 内部 .par 集合打破了 Scala 中的外部 ForkJoinTaskSupport
- python - 如何在我的多项选择故事的 if 语句中添加一个 while 循环?
- node.js - 从 tarball 构建图像