已信任
Jupyter 服务器: 本地
Python 3: Not Started
[1]
import pandas as pd
import numpy as np
[7]
df = pd.DataFrame({
'user':['小明','小黑','小黄','小李'],
'gender':['男','女','女','男'],
'score':[99,95,70,88]
})
df
user gender score
0 小明 男 99
1 小黑 女 95
2 小黄 女 70
3 小李 男 88
[8]
df.groupby('gender')
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000029813AB8A90>
[9]
# .groups获取分组情况
df.groupby('gender').groups
{'女': [1, 2], '男': [0, 3]}
[11]
# 迭代
grouped = df.groupby('gender')
for name,group in grouped:
print(name)
print(group)
女
user gender score
1 小黑 女 95
2 小黄 女 70
男
user gender score
0 小明 男 99
3 小李 男 88
[12]
# 选择组
grouped.get_group('男')
user gender score
0 小明 男 99
3 小李 男 88
[22]
# 选择组,聚合计算
grouped.get_group('男')['score'].agg(np.mean)
93.5
[15]
# 选择组,聚合计算
grouped.get_group('女')['score'].agg(np.max)
95
[16]
# 选择组,计算长度
grouped.get_group('女').agg(np.size)
user 2
gender 2
score 2
dtype: int64
[17]
df['star'] = pd.Series([5,7,4,3])
df
user gender score star
0 小明 男 99 5
1 小黑 女 95 7
2 小黄 女 70 4
3 小李 男 88 3
[18]
grouped = df.groupby('gender')
[19]
grouped[['score','star']].agg({'score':np.mean,'star':np.sum})
score star
gender
女 82.5 11
男 93.5 8
[23]
df.groupby('gender').filter(lambda x:x['score'].mean()>90)
user gender score star
0 小明 男 99 5
3 小李 男 88 3
[-]