通过每列分组计算一次

时间:2017-08-01 20:13:20

标签: python pandas numpy

我有一个示例数据帧,如下所示。我正在尝试通过按列' 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())))

2 个答案:

答案 0 :(得分: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 :(得分: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