【问题标题】:Calculate z_score for a column grouped by another column计算由另一列分组的列的 z_score
【发布时间】:2016-11-07 22:35:49
【问题描述】:

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

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

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 列。

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

【问题讨论】:

    标签: python numpy pandas scipy statistics


    【解决方案1】:

    应该直截了当:

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

    【讨论】:

    • 做到了。不熟悉 pandas groupby 转换,文档也不在那里。
    猜你喜欢
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 2018-11-29
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多