2017-08-01 77 views
4

我有一个示例数据框,如下所述。我试图通过按'Sample_ID'列将它们分组在一起来计算每列的数据。也就是说,我会根据每个'Sample_ID'组(1,2和3)计算第一列的平均值和标准偏差。我可以做一个甚至几个专栏。对于我的新数据,我有100列。按每列分组计算一次

df = pd.DataFrame([[1, 1.0, 2.3,0.2,0.53], [2, 3.35, 2.0,0.2,0.65], [2,3.4, 
      2.0,0.25,0.55], [3,3.4,2.0,0.25,0.55], [1,3.4,2.0,0.25,0.55], 
      [3,3.4,2.0,0.25,0.55]], 
      columns=["Sample_ID", "NaX", "NaU","OC","EC"])\ 
      .set_index('Sample_ID') 

有没有一种方法可以遍历每一列并保存它们?以下是一列数据的计算示例,我需要对100列数据进行计算。

感谢您阅读本文!

OC_UNC=100*np.sqrt((((df.groupby(['Sample_ID'])['OC'].std() 
     /df.groupby(['Sample_ID'])['OC'].mean())**2).sum() 
      )/len((df.groupby(['Sample_ID'])['OC'].count()))) 

回答

5

IIUC:

In [31]: df.groupby('Sample_ID').agg('std') 
Out[31]: 
       NaX  NaU  OC  EC 
Sample_ID 
1   1.697056 0.212132 0.035355 0.014142 
2   0.035355 0.000000 0.035355 0.070711 
3   0.000000 0.000000 0.000000 0.000000 

计算两种:meanstd

In [32]: df.groupby('Sample_ID').agg(['mean','std']) 
Out[32]: 
      NaX    NaU    OC    EC 
      mean  std mean  std mean  std mean  std 
Sample_ID 
1   2.200 1.697056 2.15 0.212132 0.225 0.035355 0.54 0.014142 
2   3.375 0.035355 2.00 0.000000 0.225 0.035355 0.60 0.070711 
3   3.400 0.000000 2.00 0.000000 0.250 0.000000 0.55 0.000000 
+1

谢谢!这很好,'agg'功能比我想要的要多得多。 Python很棒。 –

+1

@SureshRaja,不客气。我会说Python很棒,Pandas非常棒! ;-) – MaxU

4

方式超过你要求

df.groupby('Sample_ID').describe() 

      NaX              NaU  ...  OC   EC             
      count mean  std min  25% 50%  75% max count mean ...  75% max count mean  std min 25% 50% 75% max 
Sample_ID                  ...                  
1   2.0 2.200 1.697056 1.00 1.6000 2.200 2.8000 3.4 2.0 2.15 ... 0.2375 0.25 2.0 0.54 0.014142 0.53 0.535 0.54 0.545 0.55 
2   2.0 3.375 0.035355 3.35 3.3625 3.375 3.3875 3.4 2.0 2.00 ... 0.2375 0.25 2.0 0.60 0.070711 0.55 0.575 0.60 0.625 0.65 
3   2.0 3.400 0.000000 3.40 3.4000 3.400 3.4000 3.4 2.0 2.00 ... 0.2500 0.25 2.0 0.55 0.000000 0.55 0.550 0.55 0.550 0.55 
+0

非常感谢! –