我有多个数据框具有相同的列和相同数量的观察: 例如
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 个)。
答案 0 :(得分:3)
将 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'))
答案 1 :(得分:1)
您也可以使用 pivot_table:
import numpy as np
pd.concat([df1, df2, df3]).pivot_table(index='ID', aggfunc=[np.mean, np.std]).drop('D')