如果我有如下数据框,
import numpy as np
import pandas as pd
df2 = pd.DataFrame({'type':['A', 'A', 'B', 'B', 'C', 'C'], 'value':np.random.randn(6)})
>>> df2
type value
0 A -1.136014
1 A -0.715392
2 B -1.961665
3 B -0.525517
4 C 1.358249
5 C 0.652092
我想按列'类型'对数据框进行分组。并且对每个组应用不同的功能,例如,min
用于类型为A的组,max
用于类型为B的组,mean
用于类型为C的组
编辑2014-08-05 12:00 GMT + 8:
用户提供了一些非常好的答案。但我使用groupby的原因是因为我希望结果在相同的数据框中,如下所示:
type value
0 A -1.136014
1 B -0.525517
2 C 1.005171
感谢任何帮助〜
答案 0 :(得分:2)
支持abarnert的答案,因为它是一个很好的答案。
另一方面,为了按照OP的规范回答OP的问题:
for group in df2.groupby('type'):
print group
if group[0] == 'A':
print group[1].min()
if group[0] == 'B':
print group[1].max()
if group[0] == 'C':
print group[1].mean()
另一方面,我建议只为每个组计算一切,因为它总是很容易。这是执行groupby操作的意图。
In [5]: summary = pd.DataFrame()
In [6]: summary['mean'] = df2.groupby('type').mean()['value']
In [7]: summary['min'] = df2.groupby('type').min()['value']
In [8]: summary['max'] = df2.groupby('type').max()['value']
summary
将如下所示:
In [9]: summary
Out[9]:
mean min max
type
A 0.440490 0.231633 0.649346
B 0.172303 0.023094 0.321513
C 0.669650 -0.373361 1.712662
答案 1 :(得分:1)
为什么在这里使用groupby
?它只是妨碍了你,并且你不想对这些团体做任何事情。那么为什么不手动选择每个组?
>>> df2[df2.type=='A']['value'].min()
-1.4442888428898644
>>> df2[df2.type=='B']['value'].max()
1.0361392902054989
>>> df2[df2.type=='C']['value'].mean()
0.89822391958453074