2017-08-01 147 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

非常感謝! –