python - 如何检查熊猫数据框中是否存在特定条目并添加新条目?
问题描述
我有一个数据框,它由混淆矩阵分组(tp、fp、fn、tn)、模型名称(下面的示例有 2 个模型,但实际上这是一个可变数量且更大)和比例(示例的比例在给定的模型 + 混淆矩阵分组中,例如模型 1 的示例比例为 tp)。数据框看起来像这样,但这又是由组合而成的,而且要小得多。
confusion_matrix_group | model | proportion
TP Model1 0.73
TN Model1 0.27
FN Model2 0.24
TP Model2 0.58
TN Model2 0.18
...
如您所见,给定模型的 TP+FP+FN+TN 比例总和为 1。但是,如示例中所示,模型可能没有全部 4 个分组(模型 1 仅 TP/TN 和 FN/TP/ TN 模型 2)。我想通过并填写任何缺失的组来获得分组、模型和 0.0 的比例。上面的例子会变成这样:
confusion_matrix_group | model | proportion
TP Model1 0.73
TN Model1 0.27
FN Model2 0.24
TP Model2 0.58
TN Model2 0.18
FP Model1 0.0
FN Model1 0.0
FP Model2 0.0
...
我尝试应用以下代码,但由于某种原因,它没有进入下面的 if 条件,这对我来说没有意义。我怀疑这是解决此问题的最佳方法,因此可以完全修复此代码或其他建议。谢谢你的帮助!
for group in ['TP', 'TN', 'FP', 'FN']: for model in np.unique(df.model): print([group, model]) # To fix: This condition doesn't work if [group, model]) not in df[['confusion_matrix_group', 'model']].values: # TODO: ADD NEW ROW to df
解决方案
一种方法是先粗暴地添加所有组合,然后再添加drop_duplicates
(可能对性能不友好):
import pandas as pd
df = pd.DataFrame({'confusion_matrix_group': {0: 'TP', 1: 'TN', 2: 'FN', 3: 'TP', 4: 'TN'},
'model': {0: 'Model1', 1: 'Model1', 2: 'Model2', 3: 'Model2', 4: 'Model2'},
'proportion': {0: 0.73, 1: 0.27, 2: 0.24, 3: 0.58, 4: 0.18}})
df2 = pd.DataFrame([[x, i, 0] for i in df["model"].unique() for x in ("TP","FP","FN","TN")],columns=df.columns)
print (pd.concat([df,df2],ignore_index=True).drop_duplicates(["model","confusion_matrix_group"],keep="first"))
#
confusion_matrix_group model proportion
0 TP Model1 0.73
1 TN Model1 0.27
2 FN Model2 0.24
3 TP Model2 0.58
4 TN Model2 0.18
6 FP Model1 0.00
7 FN Model1 0.00
10 FP Model2 0.00
另一种类似的方法是首先创建一个新的串联名称列:
df["new"] = df["confusion_matrix_group"]+df["model"]
df2 = pd.DataFrame([[x, i, 0, x+i] for i in df["model"].unique() for x in ("TP","FP","FN","TN")],columns=df.columns)
print (pd.concat([df,df2.loc[~df2["new"].isin(df["new"])]],ignore_index=True))
#
confusion_matrix_group model proportion new
0 TP Model1 0.73 TPModel1
1 TN Model1 0.27 TNModel1
2 FN Model2 0.24 FNModel2
3 TP Model2 0.58 TPModel2
4 TN Model2 0.18 TNModel2
5 FP Model1 0.00 FPModel1
6 FN Model1 0.00 FNModel1
7 FP Model2 0.00 FPModel2
推荐阅读
- python - DM 中的 Discord.py 机器人反应
- ios - 从 Firebase 检索少数字段值之一到表视图单元格
- reactjs - React + Formik + Papaparse:无法访问更新的状态值,而是未定义
- java - Java 服务器和客户端类上的石头剪刀布游戏
- android - 如何在 decodeResource 中调整大小的位图
- excel - 如何从 Delphi 将一维值数组分配给 Excel 列
- html - 在 Bootstrap 中使用 SRCSET 时的 SIZES 属性
- c++ - 使用叉子和套接字 C++ 的晚餐哲学家
- php - 如何为重复内容使用自定义帖子类型
- css - react-table tbody 不可垂直滚动