【问题标题】:Mean and standard deviation with multiple dataframes多个数据帧的均值和标准差
【发布时间】:2021-08-07 13:26:17
【问题描述】:

我有多个数据框具有相同的列和相同数量的观察: 例如

d1 = {'ID': ['A','B','C','D'], 'Amount': 
    [1,2,3,4]}
df1 =pd.DataFrame(data=d1)

d2 = {'ID': ['A','B','C','D'], 'Amount': 
    [6,0,1,5]}
df2 =pd.DataFrame(data=d2)

d3 = {'ID': ['A','B','C','D'], 'Amount': 
    [8,1,2,3]}
df3 =pd.DataFrame(data=d3)

我需要在每个数据框中删除一列 (D) 及其对应的值,然后针对每个变量计算平均值和标准差。 预期的输出应该是

  avg   std
A   5    ...
B  ...   ...
C  ...   ...

通常,对于一个数据帧,我会使用删除列,然后我会使用 mean() 和标准差 std() 计算平均值。
如何使用多个数据帧以简单快捷的方式做到这一点? (我至少有 10 个)。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    将concat 与DataFrame.query 中的D 结合使用,并由GroupBy.agg 聚合并命名聚合:

    df = (pd.concat([df1, df2, df3])
            .query('ID != "D"')
            .groupby('ID')
            .agg(avg=('Amount', 'mean'), std=('Amount', 'std')))
    print (df)
        avg       std
    ID               
    A     5  3.605551
    B     1  1.000000
    C     2  1.000000
    

    或者通过DataFrame.drop删除最后一步中的D:

    df = (pd.concat([df1, df2, df3])
            .groupby('ID')
            .agg(avg=('Amount', 'mean'), std=('Amount', 'std'))
            .drop('D'))
    

    【讨论】:

    • @LdM - 最简单的是 .drop(['D', 'A', 'C']) 用于删除 A, C, D 行
    【解决方案2】:

    您也可以使用 pivot_table:

    import numpy as np
    
    pd.concat([df1, df2, df3]).pivot_table(index='ID', aggfunc=[np.mean, np.std]).drop('D')
    

    【讨论】:

      猜你喜欢
      • 2015-06-19
      • 2014-09-28
      • 2015-06-08
      • 1970-01-01
      • 2020-07-30
      • 1970-01-01
      • 2021-04-25
      • 2017-10-09
      • 1970-01-01
      相关资源
      最近更新 更多