类似SQL:
select city,max(temperature) from city_weather group by city;
groupby:先对数据分组,然后在每个分组上应用聚合函数、转换函数(例如sum、mean等函数)
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': np.random.randn(8),
'D': np.random.randn(8)})
print(df)
将A分组,求和
df.groupby('A').sum()
将AB列分组,求平均数
df.groupby(['A','B']).mean()
我们看到:(‘A’,‘B’)成对变成了二级索引,加入 as_index=False参数取消AB索引
df.groupby(['A','B'], as_index=False).mean()
对A分组,然后分别求和,平均数和标准差
df.groupby('A').agg([np.sum, np.mean, np.std])
我们看到有C和D两组数据的三个数据统计,倘若我们只查看C或者D的数据
# 方法1:预过滤,性能更好
df.groupby('A')['C'].agg([np.sum, np.mean, np.std])
# 方法2
df.groupby('A').agg([np.sum, np.mean, np.std])['C']
对A分组,求C的和,D的平均值
df.groupby('A').agg({"C":np.sum, "D":np.mean})
for循环可以直接遍历每个group
import pandas as pd
import numpy as np
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': np.random.randn(8),
'D': np.random.randn(8)})
①对A分组,进行遍历
g = df.groupby('A') # g=
for name, group in g:
print(name)
print(group)
print()
我们可以看到大概流程,先分组,分组了一项后,就会对该项进行统计。
②获取单个分组的数据
g.get_group('bar')
①对AB分组,进行遍历
g = df.groupby(['A', 'B'])
for name,group in g:
print(name)
print(group)
print()
②获取单个分组的数据
g.get_group(('foo', 'one'))
③可以直接查询group后的某几列,生成Series或者子DataFrame
g = df.groupby(['A', 'B'])
# print(g['C']) #g['C']=
for name, group in g['C']:
print(name)
print(group)
print(type(group))
print()