[英]Application of different functions to Pandas columns via Groupby
我需要计算沿列(轴= 0)的标准偏差,但是由于两列的范围不同(q1_5 = [0-15],q6_9 = [0-4]),我必须通过最大值进行归一化。 值(第q1_5列乘15,第q6_9列乘4)
q1_5 q6_9 participant_id
0 2.0 0.0 11
1 3.0 0.0 11
2 3.0 0.0 11
3 3.0 0.0 11
4 3.0 0.0 11
183 2.0 0.0 14
184 3.0 0.0 14
185 2.0 0.0 14
186 3.0 0.0 14
187 3.0 0.0 14
358 5.0 0.0 17
359 5.0 0.0 17
360 3.0 0.0 17
361 4.0 0.0 17
362 4.0 0.0 17
535 4.0 0.0 18
536 5.0 0.0 18
537 4.0 0.0 18
538 3.0 0.0 18
539 3.0 0.0 18
我想用GroupBy做到这一点(因为我正在学习熊猫,并且想利用其内在功能)。
我试图做类似的事情:
df.groupby('participant_id').agg([lambda x: (x.q1_5/15.0).std(), lambda x: (x.q6_9/4.0).std()])
但这没用。
AttributeError: 'Series' object has no attribute 'q1_5'
问题
当您将函数列表传递给groupby.agg而不切片列时,它将遍历DataFrame中的所有列(分组的列除外)并应用这些函数。 因此,它以lambda x: (x.q1_5/15.0).std()
,它尝试将其应用于列q1_5
但您的代码转换为df['q1_5']['q1_5']
。 相反,如果要为不同的列指定不同的功能,则需要使用字典:
df.groupby('participant_id').agg({'q1_5': lambda x: (x/15.).std(),
'q6_9': lambda x: (x/4.).std()})
Out:
q6_9 q1_5
participant_id
11 0.0 0.029814
14 0.0 0.036515
17 0.0 0.055777
18 0.0 0.055777
对于具有不同范围的数据,有很多标准化选项(最小值,最大值,z分数,计算变异系数等),但是选择哪种方法取决于您的数据集。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.