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