gpt4 book ai didi

python-2.7 - 将按 zscore 分组的列添加到 Pandas 数据框

转载 作者:行者123 更新时间:2023-12-04 22:43:10 26 4
gpt4 key购买 nike

我可以将一列插入到一个数据框中,该数据框对另一列进行 z 评分,如下所示:

[1] df.insert(<loc>, column='ZofA', value=(df['A']-df['A'].mean())/df['A'].std())

我可以对由 2 个其他列分组的列进行简单的缩减,如下所示:
[2] df.groupby(['C1', 'C2'])['A'].mean()

我试图用 [1] 中的 zscore 函数替换 [2] 中的简单 mean() 函数,但无法弄清楚如何做到这一点,包括使用 .apply - 例如这失败了:
[3] df.groupby(['C1', 'C2']).apply((df['A']-df['A'].mean())/df['A'].std())

所以我的第一个问题是我显然不知道如何使用分组创建 zscore 列。

我的第二个问题是我想结合 (1) 将一个新列插入到一个数据框 ('ZofA') 中,该数据框包含来自另一列 ('A') 的 z 分数,(2) 在定义的组内计算这些 zscore由另外两列('C1','C2')。 (3) 我想在一个 df.insert() 语句中完成所有这些。我只是把括号和括号弄乱了,还是我试图在一个语句中做太多事情?谢谢!

最佳答案

感谢您提供指向文档的指针。对于任何好奇的人,我想我会发布解决方案。首先,将 zscore 计算放入一个 lambda 中:

zscore = lambda x: (x - x.mean()) / x.std()

神奇的成分是.transform。只需像这样编写插入语句:
df.insert(<loc>, 'ZofA', df.groupby(['C1', 'C2'])['A'].transform(zscore))

解决方案确实在“Group By:split-apply-combine”文档中。您只需向下滚动大约一半到“转换”部分。我忽略了关于日期键的内容,只是将我的分组列直接插入到 groupby 语句中。

关于python-2.7 - 将按 zscore 分组的列添加到 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39421202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com