数据分组技术GroupBy和数据聚合Aggregation
数据分组技术GroupBy和数据聚合Aggregation
数据概览
其中包括四行:日期、城市、温度、风力。它的大小为20行。
按列分组
加入这里按照city这一列进行分组:
1 2 |
g = df.groupby(df['city']) |
得到一个DataFrameGroupBy 类型的对象:
<pandas.core.groupby.DataFrameGroupBy object at 0x10d45a128>
查看分组信息
1 2 |
g.groups |
1 2 |
g.get_group('BJ') # 查看某一个分组 |
他相当于把city为BJ的行都过滤出来,并形成了一个新的dataframe
分组计算
1 2 3 4 5 6 |
df_bj = g.get_group('BJ') df_bj.mean() # 将北京的行求平均 g.mean() # 对整个表求平均 g.max() # 对整个表求最大值 g.min() # 对整个表求最小值 |
GroupBy的操作过程
以求平均值为例:
GroupBy对一个group中的某一组取平均值,得到的结果为series,而对整个分组对象取平均值,得到的是dataframe。所以对整个分组对象取平均值的过程就是分别对每一组取平均值然后combine。
分组对象转化为列表和字典
转换成列表直接通过list方法,然后每一个分组就是字典中的一个元素:
1 2 3 |
dict(list(g)) # 所有分组 dict(list(g))['BJ'] # 按照BJ分组 |
转换成字典需要先通过list转换成列表然后通过dict转换成字典,其中key就是分组指定的依据(city),value是一个dataframe:
1 2 3 |
dict(list(g)) dict(list(g))['BJ'] |
遍历DataFrameGroupBy对象中的数据:
1 2 3 4 5 6 7 |
for name, group_df in g: print(name) print(group_df) //类似于SQL中的 select * from table_1 group by column_1 |
数据聚合Aggregation
可以通过agg方法传入需要使用的聚合的函数,来对数据进行聚合:
1 2 3 4 |
g.agg('min') g.agg('max') g.agg('describe') |
也可以通过传入自定义的聚合函数来得到聚合的结果:
1 2 3 4 |
def foo(attr): return attr.max() - attr.min() g.agg(foo) |