python - 从 A 列中获取列名,然后将该列的值保存在新的 C 列中

标签 python pandas

我有一个看起来像这样的 pandas 数据框:(它基于图像分析并使用 3 种不同的算法及其置信度来猜测图像是什么)

p1    p1_conf   p2    p2_conf   p3       p3_conf
dog   0.45      cat   0.32      book     0.05
dog   0.01      book  0.9       table    0.5
...

最终目标是找到最佳预测(置信度最高的预测):即第一行是狗,第二行是书。

我使用以下代码找到最大置信度和具有最大置信度的列的名称:

df['max_conf'] = df[['p1_conf', 'p2_conf', 'p3_conf']].max(axis=1)
df['max_col'] = df[['p1_conf', 'p2_conf', 'p3_conf']].idxmax(axis=1)
df['pred_algorithm'] = df['max_col'].apply(lambda x: x.split('_')[0])

现在我的数据框看起来像这样:

p1    p1_conf   p2    p2_conf   p3       p3_conf   max_conf   pred_algorithm
dog   0.45      cat   0.32      book     0.05      0.45       p1
dog   0.01      book  0.9       table    0.5       0.9        p2
...

现在,我需要使用 pred_algorithm 列为每一行找到最佳预测。

我试过这个:

df['best_prediction'] = df[df['pred_algorithm']]

我收到以下错误:

ValueError: Wrong number of items passed 1691, placement implies 1

我怎样才能创建这个新专栏?

最佳答案

可以使用 lookup 从使用另一列值的列中选择值:

df['best_prediction'] = df.lookup(df.index, df['pred_algorithm'])

结果数据框:

p1  p1_conf p2   p2_conf p3   p3_conf max_conf pred_algorithm best_prediction
0   dog     0.45 cat     0.32 book    0.05     0.45 p1        dog
1   dog     0.01 book    0.90 table   0.50     0.90 p2        book

关于python - 从 A 列中获取列名,然后将该列的值保存在新的 C 列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52109362/

相关文章:

python - RESTful API 和谷歌分析

python - IDLE中如何开启行号?

python - 如何在 python flask Restful web 服务中使用共享队列

python - Pandas timedelta64[ns] 计算

python - 在 numpy 中按间隔分割数组的简单方法

python - 分割日期时间、python、pandas

python - 如果给定 python 中的一些元组索引,如何获取子元组列表?

python - 我可以仅使用诗歌安装新版本的 python 吗?

Python Pandas - 向量化自定义函数而不是应用

pandas - 左合并后令人困惑的 pandas 索引变化