df.groupby根据分类变量进行分组,随后分别对各组的连续变量进行统计描述。
import pandas as pd
df = pd.DataFrame({'id': [1, 2, 3, 4, 5],
'sex': ['M', 'F', 'M', 'F', 'M'],
'age': [25, 30, 28, 35, 40],
'HUA': [0, 0, 0, 1, 1],
'Scr': [1.2, 1.0, 1.5, 1.3, 1.8],
'UA': [5.0, 4.5, 6.0, 5.5, 7.0]})
# df为:
id sex age HUA Scr UA
0 1 M 25 0 1.2 5.0
1 2 F 30 0 1.0 4.5
2 3 M 28 0 1.5 6.0
3 4 F 35 1 1.3 5.5
4 5 M 40 1 1.8 7.0
for name,group in df.groupby('sex'):
print('\n',name, '\n',group)
# 输出:
F
id sex age HUA Scr UA
1 2 F 30 0 1.0 4.5
3 4 F 35 1 1.3 5.5
M
id sex age HUA Scr UA
0 1 M 25 0 1.2 5.0
2 3 M 28 0 1.5 6.0
4 5 M 40 1 1.8 7.0
"""根据sex进行分组,分别计算UA的平均值、样本标准差、样本标准误"""
"""不改列名"""
df.groupby(['sex'])['UA']\
.agg(['mean','std', 'sem']).reset_index()
# 输出为:
sex mean std sem
0 F 5.0 0.707107 0.50000
1 M 6.0 1.000000 0.57735
"""改列名"""
df.groupby(['sex'])['UA']\
.agg([('UA的平均值','mean'),
('UA的样本标准差','std'),
('UA的样本标准误','sem')]).reset_index()
# 输出为:
sex UA的平均值 UA的样本标准差 UA的样本标准误
0 F 5.0 0.707107 0.50000
1 M 6.0 1.000000 0.57735