闲话少说直接上代码和思路
import numpy as np
import pandas as pd
df = pd.DataFrame({'key1':list('aabba'),
'key2': ['one','two','one','two','one'],
'data1': np.random.randn(5),
'data2': np.random.randn(5)})
print(df)
#假设你想要对key进行分组,并计算data1列的平均值
grouped = df['data1'].groupby(df['key1']).mean()
print(grouped)
#说明:数据根据分组进行了聚合,产生了一个新的Series,其索引为key1列中的某一个值
#之所以结果中索引的名称为key1,是因为原始数据框列的df['key']就叫这个名字
means = df['data1'].groupby([df['key1'],df['key2']]).mean()
print(means)
print(means.unstack())
#当然,你可以对这些数据片段做任何操作,有一个你可以会觉得有用的原酸,将这些数据片段做成一个字典
pieces = dict(list(df.groupby('key1')))
print(pieces['b'])
#####选择一个或一组列
#由于DataFrame产生的groupBy对象,如果用一个或者一组列名对其进行索引,就能产生选取部分列进行聚合的目的
df.groupby(['key1','key2'])[['data2']].mean()
df.groupby(['key1','key2'])['data2'].mean()
#数据聚合
#要使用自己定义的聚合函数,需将其传入agg方法即可
def peak_to_peak(arr):
return arr.max()-arr-min()
grouped = df.groupby('key1')
grouped.agg(peak_to_peak)
#面向列的多函数应用
#####################你希望对不同列使用不同的聚合函数时看如下实例
grouped.agg(['mean','std'])
grouped.agg([('foo','mean'),('bar',np.std)])
#现在假设你想要对不同的列应用不同的函数,具体的办法就是对agg传入一个从列名映射到函数的字典
grouped.agg({'tip_pct':['min','max','mean'],'size':'sum'})
#一般情况下,聚合函数都需要唯一的分组键组成的索引,但也可以通过向gourpby传入as_index=False以禁用这个功能
'''
1、apply,一般性的拆分-应用-合并
最一般的groupby方法是apply,apply会将待处理的对象拆分为多个片段,然后对各个片段调用传入的函数,最后尝试将各片段组合在一起,
在groupby中,当你调用诸如describe之类的方法时,实际上是应用了快捷方式:f=lambda x:x.describe();grouped.apply(f)
'''