Pandas:跨多个数据帧的元素平均值和标准差

时间:2015-04-03 19:36:20

标签: python python-3.x pandas

数据: 多个相同格式的数据帧(相同的列,相同的行数,没有丢失的点)。

如何创建一个“摘要”数据框,其中包含每个元素的元素均值?包含元素标准差的数据框怎么样?

UPD:

A         B         C
0 -1.624722 -1.160731  0.016726
1 -1.565694  0.989333  1.040820
2 -0.484945  0.718596 -0.180779
3  0.388798 -0.997036  1.211787
4 -0.249211  1.604280 -1.100980
5  0.062425  0.925813 -1.810696
6  0.793244 -1.860442 -1.196797

          A         B         C
0  1.016386  1.766780  0.648333
1 -1.101329 -1.021171  0.830281
2 -1.133889 -2.793579  0.839298
3  1.134425  0.611480 -1.482724
4 -0.066601 -2.123353  1.136564
5 -0.167580 -0.991550  0.660508
6  0.528789 -0.483008  1.472787

3 个答案:

答案 0 :(得分:4)

您可以创建DataFrames的面板,然后沿项目轴计算平均值和SD:

df1 = pd.DataFrame(np.random.randn(10, 3), columns=['A', 'B', 'C'])
df2 = pd.DataFrame(np.random.randn(10, 3), columns=['A', 'B', 'C'])
df3 = pd.DataFrame(np.random.randn(10, 3), columns=['A', 'B', 'C'])
p = pd.Panel({n: df for n, df in enumerate([df1, df2, df3])})

>>> p.mean(axis=0)
          A         B         C
0 -0.024284 -0.622337  0.581292
1  0.186271  0.596634 -0.498755
2  0.084591 -0.760567 -0.334429
3 -0.833688  0.403628  0.013497
4  0.402502 -0.017670 -0.369559
5  0.733305 -1.311827  0.463770
6 -0.941334  0.843020 -1.366963
7  0.134700  0.626846  0.994085
8 -0.783517  0.703030 -1.187082
9 -0.954325  0.514671 -0.370741

>>> p.std(axis=0)
          A         B         C
0  0.196526  1.870115  0.503855
1  0.719534  0.264991  1.232129
2  0.315741  0.773699  1.328869
3  1.169213  1.488852  1.149105
4  1.416236  1.157386  0.414532
5  0.554604  1.022169  1.324711
6  0.178940  1.107710  0.885941
7  1.270448  1.023748  1.102772
8  0.957550  0.355523  1.284814
9  0.582288  0.997909  1.566383

答案 1 :(得分:1)

这里的一个简单解决方案是简单地将现有数据帧连接成一个数据帧,同时添加一个ID变量来跟踪原始数据源:

dfa = pd.DataFrame( np.random.randn(2,2), columns=['a','b'] ).assign(id='a')
dfb = pd.DataFrame( np.random.randn(2,2), columns=['a','b'] ).assign(id='b')

df = pd.concat([df1,df2])

          a         b id
0 -0.542652  1.609213  a
1 -0.192136  0.458564  a
0 -0.231949 -0.000573  b
1  0.245715 -0.083786  b

现在,您将两个2x2数据帧合并为一个4x2数据帧。 ' id'列标识了源数据框,因此您没有失去任何一般性,并且可以选择“id”#39;你可以对任何一个数据帧做同样的事情。例如。 df[ df['id'] == 'a' ]

但现在您也可以使用groupby逐个元素地执行任何pandas方法,例如mean()std()

df.groupby('id').mean()

              a         b
index                    
0      0.198164 -0.811475
1      0.639529  0.812810

答案 2 :(得分:0)

以下解决方案对我有用。

average_data_frame = (dataframe1 + dataframe2 ) / 2

或者,如果您有两个以上的数据框,请说n,然后

average_data_frame = dataframe1
for i in range(1,n):
    average_data_frame = average_data_frame + i_th_dataframe
average_data_frame = average_data_frame / n

获得平均值后,您可以计算标准偏差。如果您正在寻找“真正的 Pythonic”方法,您应该遵循其他答案。但如果您正在寻找有效且快速的解决方案,就是这样。