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

Posted

技术标签:

【中文标题】两个独立数据框列表中所有元素的平均值和标准差【英文标题】:Mean and standard deviation of all the elements in two independent lists of dataframes 【发布时间】:2021-04-05 10:04:55 【问题描述】:

我有两个列表,每个列表都有两个数据框。例如,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 = 和 m2 =

另外,如果s1 = std(df11, df21)s2 = std(df12, df22),那么

s1 = 和 s2 =

【问题讨论】:

不清楚你想要什么。请问mean(df11, df21) 是什么意思? std(df11, df21) 相同。理想情况下,请提供您想要的示例输出 mean(df11, df21) 表示df11df21 两个数据帧中对应元素的平均值。同样,std(df11, df21) 表示df11df21 两个数据帧中对应元素的标准差。结果输出矩阵如上图所示。 现在明白了,看看我自己的解决方案的替代方案 【参考方案1】:

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

根据给定的信息,

列表数量,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)

【讨论】:

【参考方案2】:

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

这是一个可能的替代方案

想法是使用内部 numpy 表示并使用 numpy 连接/均值计算

平均数:

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)]

产生一个包含两个 dfs 的列表:

[   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。适用于任何长度的数组

【讨论】:

以上是关于两个独立数据框列表中所有元素的平均值和标准差的主要内容,如果未能解决你的问题,请参考以下文章

基于均值标准差的子集

R中具有多个分组因子的多个变量的均值和标准差

用均值条形图及其标准差 ggplot2 总结数据框

计算多个变量的一个均值和标准差

怎么算标准差?

平均数、中位数、众数、方差、标准差、极差要怎么计算