我可以在数据框中插入一列,然后对另一列进行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)将新列插入到包含另一列('A')的z分数的数据帧('ZofA')中,(2)使这些zscore在定义的组中计算由其他两列(“C1”,“C2”)组成。 (3)我想在一个df.insert()语句中完成所有这些操作。我是在弄乱括号和方括号,还是在弄乱其他意思,还是在一个声明中试图做太多事情?谢谢!
最佳答案
感谢您指向文档的指针。对于任何好奇的人,我想我都会发布解决方案。首先,将zscore计算值放入lambda中:
zscore = lambda x: (x - x.mean()) / x.std()
魔术成分是.transform。只需像这样编写insert语句:
df.insert(<loc>, 'ZofA', df.groupby(['C1', 'C2'])['A'].transform(zscore))
解决方案的确在“分组依据:split-apply-combine”文档中。您只需要向下滚动到“转换”部分的一半即可。我忽略了有关日期键的内容,只是将分组列直接插入groupby语句中。
关于python-2.7 - 将分组的zscore列添加到pandas数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39421202/