计算由另一列分组的列的z_score

时间:2016-07-05 23:37:41

标签: python numpy pandas scipy statistics

假设我有一个包含person_idmean_act列的DataFrame,其中每一行都是特定人员的数值。我想计算个人级别所有值的zscore。也就是说,我想要一个新的列mean_act_person_zscore,它仅使用该人的zscores的均值和标准(而不是整个数据集)计算为mean_act的zscore。

我的第一种方法是这样的:

person_ids = df['person_id'].unique()
for pid in person_ids:
    person_df = df[df['person_id'] == pid]
    person_df = (person_df['mean_act'] - person_df['mean_act'].mean())/person_df['mean_act'].std()

在每次迭代时,它都会计算正确的zscore输出序列,但问题在于,由于选择是通过引用而不是值,原始df最终没有mean_act_person_zscore列。

关于如何做到这一点的想法?

1 个答案:

答案 0 :(得分:1)

应该是直截了当的:

df['mean_act_person_zscore'] = df.groupby('person_id').mean_act.transform(lambda x: (x - x.mean()) / x.std())