多个数据框的均值和标准差

3

我有多个数据框,它们具有相同的列和相同数量的观测值:

例如:

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  ...   ...

通常,对于一个数据框,我会使用drop columns,然后使用mean()计算平均值和std()计算标准差。
如何在多个数据框中以简单快捷的方式执行此操作?(我至少有10个数据框)。

2个回答

5
使用 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行。 - jezrael

3

您也可以使用pivot_table:

import numpy as np

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接