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

时间:2021-05-18 09:59:21

标签: python pandas

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

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 个)。

2 个答案:

答案 0 :(得分:3)

concatDataFrame.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'))

答案 1 :(得分:1)

您也可以使用 pivot_table:

import numpy as np

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