如何在每次迭代的图形标题中打印 pearsonr 循环的结果

How to print the result of pearsonr loop in the graph title for each iteration

我有这段代码,其中循环遍历 PRDCT 列,然后计算 p 和 r 值,并为每个唯一产品代码创建一个图表:

for prd in df_final.PRDCT.unique():
    df_tmp = df_final[df_final.PRDCT== prd].reset_index().copy()
    coeff, p = pearsonr(df_tmp['PRDCT_mean'], np.arange(0,len(df_tmp['PRDCT_mean'])))
    plt.figure(figsize = (15,6))
    plt.plot(df_tmp['Month'],df_tmp['PRDCT_mean'], marker="o")
    plt.title(prd, fontsize=18)
    plt.ylabel('PRDCT_mean')
    plt.xlabel('Month')
    plt.grid(True)
    plt.ylim((-60,60))
    plt.xticks(rotation= 'vertical',size=8)
    plt.show()

问题1:如何在每个产品的图表标题旁边显示每个唯一产品代码的各自系数值?

问题2:如何分别保存每次迭代的每个pearsonr P和r值的结果?

如果可能,最好将这些操作包含在同一代码中

致谢

考虑创建一个定义的方法来处理所有步骤:构建绘图、将字符串统计信息连接到标题,以及 returns 统计信息。然后使用 DataFrame.groupby.

通过理解创建字典
def run_plot_save_stats(prd, df_tmp):
    df_tmp = df_tmp.reset_index().copy()
    coeff, p = pearsonr(df_tmp['PRDCT_mean'], np.arange(0,len(df_tmp['PRDCT_mean'])))
    title = f"Product: {prd} - pearson coeff: {coeff.round(4)} p-value: {p.round(4)}"

    plt.figure(figsize = (15,6))
    plt.plot(df_tmp['Month'],df_tmp['PRDCT_mean'], marker="o")
    plt.title(title, fontsize=18)
    plt.ylabel('PRDCT_mean')
    plt.xlabel('Month')
    plt.grid(True)
    plt.ylim((-60,60))
    plt.xticks(rotation= 'vertical',size=8)
    plt.show()

    return {"pearson": coeff, "p_value": p}

prod_stats_dict = {
    grp: run_plot_save_stats(grp, df) for grp, df in df_final.groupby("PRDCT")
}

prod_stats_dict["product1"]["pearson"]
prod_stats_dict["product1"]["p_value"]
prod_stats_dict["product2"]["pearson"]
prod_stats_dict["product2"]["p_value"]
...