我有一个看起来像这样的 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/