Pandas入门之十四:分组

已信任
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    1193.5    8
[23]



df.groupby('gender').filter(lambda x:x['score'].mean()>90)
user    gender    score    star
0    小明    男    99    5
3    小李    男    88    3
[-]
原文地址:https://www.cnblogs.com/vvzhang/p/15022160.html