我需要应用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] 删除。
我来说两句