我有一个大数据框,我想根据其他列的值更改某些行的值。我的 for 循环的问题是大型数据集需要很长时间。
数据框的列类似于
标签 | 预言 | 测试标签1 | 测试标签2 | 测试标签3 |
---|---|---|---|---|
标签 1 | 标签2 | 0.3 | 0.6 | 0.1 |
在这种情况下,由于 pred_label2 < 0.9,列“预测”的值应更改为“label1”
for i, row in df.iterrows():
pred_label = row['prediction']
proba_label = 'proba_' + pred_label
probability = row[proba_label]
if probability <= 0.9:
df.at[i, 'prediction'] = row['label']
示例 DF
data = {'host': ['A','B','A'],
'label': ['label1', 'label2', 'label1'],
'prediction': ['label1', 'label3', 'label3'],
'proba_label1': [0.9, 0.03, 0.2],
'proba_label3': [0.1, 0.95, 0.75],
'proba_label2': [0, 0.02, 0.05]
}
df = pd.DataFrame(data)
从示例数据和可能的上下文(具有用于分类的 softmax 函数的机器学习模型),很明显,初始预测始终是具有最高概率的标签。
您可以利用这一事实来避免任何循环或查找:
proba_max = np.max([df.proba_label1, df.proba_label2, df.proba_label3], axis=0)
df['prediction'] = np.where(proba_max <= 0.9, df['label'], df['prediction'])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句