Appearance
分组聚合
分组聚合是 Pandas 最强大的功能之一,用于对数据进行分组统计。
基本分组
python
import pandas as pd
df = pd.DataFrame({
'部门': ['技术', '销售', '技术', '销售', '技术'],
'姓名': ['张三', '李四', '王五', '赵六', '孙七'],
'工资': [8000, 6000, 9000, 7000, 8500]
})
# 按部门分组
grouped = df.groupby('部门')
# 分组求平均
print(grouped['工资'].mean())
# 分组求和
print(grouped['工资'].sum())
# 分组计数
print(grouped['工资'].count())多列分组
python
df = pd.DataFrame({
'部门': ['技术', '技术', '销售', '销售'],
'性别': ['男', '女', '男', '女'],
'工资': [8000, 7500, 6000, 6500]
})
# 按多列分组
grouped = df.groupby(['部门', '性别'])
print(grouped['工资'].mean())聚合操作
python
df = pd.DataFrame({
'部门': ['技术', '销售', '技术', '销售'],
'工资': [8000, 6000, 9000, 7000],
'奖金': [2000, 1500, 2500, 1800]
})
# 使用agg进行多聚合
grouped = df.groupby('部门')
print(grouped.agg({
'工资': ['mean', 'sum', 'max'],
'奖金': ['mean', 'sum']
}))
# 使用自定义聚合函数
print(grouped.agg({
'工资': lambda x: x.max() - x.min()
}))常用聚合函数
python
grouped = df.groupby('部门')
# 多个统计量
print(grouped.describe())
# 第一个值
print(grouped.first())
# 最后一个值
print(grouped.last())
# 第n个值
print(grouped.nth(0))
# 唯一值
print(grouped['工资'].unique())
# 值列表
print(grouped['工资'].apply(list))转换操作
python
df = pd.DataFrame({
'部门': ['技术', '销售', '技术', '销售'],
'工资': [8000, 6000, 9000, 7000]
})
# 组内标准化
df['标准化工资'] = df.groupby('部门')['工资'].transform(
lambda x: (x - x.mean()) / x.std()
)
print(df)
# 组内排名
df['排名'] = df.groupby('部门')['工资'].rank()
print(df)过滤操作
python
df = pd.DataFrame({
'部门': ['技术', '销售', '技术', '销售', '技术'],
'工资': [8000, 6000, 9000, 7000, 8500]
})
# 过滤分组
df_filtered = df.groupby('部门').filter(lambda x: x['工资'].mean() > 7000)
print(df_filtered)分组应用自定义函数
python
def top_n(df, n=2):
return df.nlargest(n, '工资')
df = pd.DataFrame({
'部门': ['技术', '技术', '技术', '销售', '销售'],
'姓名': ['张三', '李四', '王五', '赵六', '孙七'],
'工资': [8000, 9000, 8500, 6000, 7000]
})
# 应用自定义函数
result = df.groupby('部门').apply(top_n)
print(result)分组聚合是数据分析的核心技能,掌握它可以高效地进行数据统计分析。