按每列分组计算一次
问题描述:
我有一个示例数据框,如下所述。我试图通过按'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())))
答
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
计算两种:mean
和std
:
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
答
方式超过你要求
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
非常感谢! –
谢谢!这很好,'agg'功能比我想要的要多得多。 Python很棒。 –
@SureshRaja,不客气。我会说Python很棒,Pandas非常棒! ;-) – MaxU