在pandas.DataFrame.groupby.apply()之后重命名列

proinsias

我需要应用scipy.stats到按列分组的pandas DataFrame。我希望能够在结果DataFrame中保留列的名称。到目前为止,这就是我所拥有的。

从一些随机数据开始进行演示。

df = pd.DataFrame(np.random.randn(10, 5),
           columns=['a', 'b', 'c', 'd', 'e'])
df['category'] = pd.Series(["1","2","3","1","1","3","2","3","1","2"])
df.head()

输出:

    a           b           c           d           e         category
0   -0.384575   -1.722937   0.868886    -1.843398   -1.659861   1
1   1.170742    -2.732823   0.974790    -0.167318   0.399720    2
2   -0.330587   -0.214645   -0.196441   0.768405    1.256272    3
3   0.961955    -0.270461   -0.226601   1.911941    -0.595420   1
4   0.596214    0.122938    2.420786    0.113196    0.734691    1

这是使用该sum()函数的示例示例

grouped = df.groupby('category')
grouped.sum()

输出:

    a           b           c           d           e
category                    
1   -0.246350   -0.973571   4.525511    2.690969    -2.216404
2   2.238123    -3.794821   -0.457655   -1.248493   -0.342675
3   -1.049097   1.359168    1.125174    0.659131    2.139560

请注意,这些列具有正确的标签。现在解决这个问题:

grouped.apply(kurtosis)

输出:

category
1    [-1.40177576836, -1.02037807436, -1.1792712163...
2                       [-1.5, -1.5, -1.5, -1.5, -1.5]
3                       [-1.5, -1.5, -1.5, -1.5, -1.5]
dtype: object

请注意,这不再是DataFrame,并且没有列名。因此,我尝试变得聪明起来,并输出具有指定名称的系列-但这不起作用:

grouped.apply(lambda x: pd.Series(kurtosis(x), name=x.name))

输出:

     0          1           2           3           4
category                    
1   -1.401776   -1.020378   -1.179271   -1.384131   -0.984184
2   -1.500000   -1.500000   -1.500000   -1.500000   -1.500000
3   -1.500000   -1.500000   -1.500000   -1.500000   -1.500000

有任何想法吗?我想念什么?

艾汉

不知道为什么会发生这种情况(我的引发了一个TypeError反而),但是您可以使用agg

df.groupby("category").agg(kurtosis)
Out[16]: 
                a         b         c         d         e
category                                                 
1        -1.18953 -1.013635 -1.756748 -1.167473 -1.271358
2        -1.50000 -1.500000 -1.500000 -1.500000 -1.500000
3        -1.50000 -1.500000 -1.500000 -1.500000 -1.500000

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章