两个独立的数据帧列表中所有元素的均值和标准差

Mean and standard deviation of all the elements in two independent lists of dataframes

我有两个列表,每个列表都有两个数据框。例如,lst1 = [df11, df12] 和 lst2 = [df21, df22]。我想计算两个列表 lst1 和 lst2 的相应元素的均值和标准差。即 lst3 = [mean(df11, df21), mean(df12, df22)]lst4 = [std(df11, df21), std(df12, df22)].

下面给出对应的数据框,

df11 = pd.DataFrame(np.array([[99,85,93], [89,97,94], [80,95,89]]), index=["A", "B", "C"], columns = ["Sensetivity", "specificity", "Accuracy"])  
df21 = pd.DataFrame(np.array([[85,99,50], [97,89,75], [95,80,60]]), index=["A", "B", "C"], columns = ["Sensetivity", "specificity", "Accuracy"])
df12 = pd.DataFrame(np.array([[99,85,93], [89,97,94], [80,95,89]]), index=["A", "B", "C"], columns = ["Sensetivity", "specificity", "Accuracy"])  
df22 = pd.DataFrame(np.array([[85,99,50], [97,89,75], [95,80,60]]), index=["A", "B", "C"], columns = ["Sensetivity", "specificity", "Accuracy"])

此外,lst1 = [df11, df12]lst2 = [df21, df22]

在 python 中有没有一种简单的方法可以做到这一点?

编辑:假设 m1 = mean(df11, df21)m2 = mean(df12, df22),则

m1 = and m2 =

此外,如果 s1 = std(df11, df21)s2 = std(df12, df22),则

s1 = and s2 =

我得到了这个问题的答案。

根据给定的信息,

列表数量,NumberOfLists = 2 每个列表的数据帧数,NumberOfDfPerList = 2

for i in range(NumberOfDfPerList):       
    listofDf        = [listOfDf[k][i] for k in range(NumberOfLists)]
    stats           = pd.concat(listofDf).groupby(level=0).agg(['mean','std']).swaplevel(0,1,axis=1).round(2).astype(str)           
    result          = stats['mean'] + '±' + stats['std']
    result_arr.append(result)

我注意到你自己得到了很好的答案

这是一个可能的选择

想法是使用内部 numpy 表示并使用 numpy concatenation/mean calcs

对于平均值:

import numpy as np
[pd.DataFrame(np.array([p1.values, p2.values]).mean(axis=0), columns = df11.columns, index = df11.index) for (p1,p2) in zip(lst1,lst2)]

生成包含两个 df 的列表:

[   Sensetivity  specificity  Accuracy
 A         92.0         92.0      71.5
 B         93.0         93.0      84.5
 C         87.5         87.5      74.5,
    Sensetivity  specificity  Accuracy
 A         92.0         92.0      71.5
 B         93.0         93.0      84.5
 C         87.5         87.5      74.5]

与 std 类似,将上面命令中的 mean 替换为 std。适用于任何长度的数组