1.通过列进行分组
访问列1,并根据列2和列3调用groupby,生成的是对象:
s=df['列1'].groupby([df['列2'],df['列3']])
求和:sums=s.sum()
sums.unstack()
或者:
df.groupby(['key1','key2']).sum()
df.groupby(['key1', 'key2']).size():返回一个含有分组大小的Series
2.通过字典或Series进行分组
groupby后面可以传递字典:
people = pd.DataFrame(np.random.rand(5, 5), columns=['a', 'b', 'c', 'd', 'e'], index=['Joe', 'Steve', 'Wes', 'Jim', 'Travis'] )
mapping = {'a': 'red', 'b': 'red', 'c': 'blue', 'd': 'blue', 'e': 'red', 'f': 'orange'}
people.groupby(mapping,axis=1).sum()
count() 计数
pd.Series()后也可传递字典
3.通过函数进行分组
people.groupby(len).sum()
函数跟数组、列表、字典、Series混合使用也可以
如果要使用自己的聚合函数,只需将其传入aggregate或agg方法(自定义函数)即可:
def peak_to_peak(arr):
return arr.max() - arr.min()
print(df.groupby().agg(peak_to_peak))
4.groupby对象支持迭代
for (k1, k2), group in df.groupby(['key1', 'key2']):
print((k1, k2))
print(group)
将数据片段做成字典:
pieces =dict(list(df.groupby('key1')))
print(pieces['b'])