通过字典更新数据框行

时间:2019-02-18 09:54:56

标签: python pandas dataframe

我已经看过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

0 个答案:

没有答案