我已经看过Replace a row by a new Dataframe解决方案,但是对我来说还不清楚。
我有一个DataFrame
的模型结果,其中一个MultiIndex
是模型的名称,而我要更新的模式(训练/测试)与最后一次执行保持一致,其他模型结果(如果不存在,请创建DataFrame
或使用dic
变量更新具有相同名称和模式的行)。这是我的代码:
def save_results(dic, path = "../ModelsResults"):
try:
df_results = pd.read_pickle(path)
print("Updating ModelResults...")
df_now = pd.DataFrame.from_dict([dic])
if df_results.index.isin([(dic["Model"], dic["Mode"])]).any():
print("\tUpdating Model/Mode...")
df_now.drop(["Model", "Mode"],axis=1)
df_results.at[dic["Model"], dic["Mode"]] = df_now
else:
print("\tCreating Model/Mode...")
df_results = df_results.append(df_now)
except FileNotFoundError:
print("Creating ModelResults...")
df_results = pd.DataFrame.from_dict([dic])
df_results = df_results.set_index(["Model", "Mode"])
df_results.to_pickle(path)
print("Done")
return df_results
我要保存的每个指标都在dic
变量中。例如:
dic = {
"Model": "Dummy-PredictingAlwaysZero",
"Mode": "Train",
"MSE": mse ,
"nRMSE": nrmse,
"nDCG@10": ndcg(train["rel"].values, y_pred, k = 10),
"nDCG@50": ndcg(train["rel"].values, y_pred, k = 50)
}
df_results = save_results(dic, path = "./ModelsResults")
预期的DataFrame
如下:
MSE nDCG@10 nDCG@50 nRMSE
Model Mode
Dummy-PredictingAlwaysZero Train 0.08639 0.162948 0.106816 0.293922