我可以将一列插入到数据框中,对另一列进行 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)在定义的组内计算这些z分数由另外两列('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 语句中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)