Python中分组DataFrame的方法
在Python中,使用pandas库对DataFrame进行分组操作非常常见,以下是几种主要的分组方法:

使用groupby()方法
groupby()是pandas中最常用的分组方法:
import pandas as pd
# 示例DataFrame
data = {'Department': ['HR', 'IT', 'HR', 'IT', 'Finance'],
'Employee': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Salary': [70000, 80000, 75000, 85000, 90000],
'Age': [28, 32, 45, 29, 38]}
df = pd.DataFrame(data)
# 按部门分组并计算平均薪资
avg_salary = df.groupby('Department')['Salary'].mean()
print(avg_salary)
多列分组
可以按多列进行分组:
# 按部门和年龄范围分组 df['AgeGroup'] = pd.cut(df['Age'], bins=[20, 30, 40, 50]) grouped = df.groupby(['Department', 'AgeGroup'])['Salary'].mean() print(grouped)
分组后应用聚合函数
可以对分组后的数据应用多种聚合函数:
# 计算每组的多个统计量
stats = df.groupby('Department')['Salary'].agg(['mean', 'max', 'min', 'count'])
print(stats)
分组后应用自定义函数
可以使用apply()方法应用自定义函数:

# 自定义函数计算薪资范围
def salary_range(x):
return x.max() - x.min()
range_by_dept = df.groupby('Department')['Salary'].apply(salary_range)
print(range_by_dept)
分组后转换
使用transform()方法保持原始DataFrame的形状:
# 计算每个部门的平均薪资并添加为新列
df['DeptAvgSalary'] = df.groupby('Department')['Salary'].transform('mean')
print(df)
分组后迭代
可以遍历分组后的数据:
for name, group in df.groupby('Department'):
print(f"Department: {name}")
print(group)
print("\n")
使用agg()进行复杂聚合
可以对不同列应用不同的聚合函数:
agg_result = df.groupby('Department').agg({
'Salary': ['mean', 'max'],
'Age': 'count'
})
print(agg_result)
分组后过滤
使用filter()方法根据组条件过滤整个组:

# 只保留平均薪资大于75000的部门
filtered = df.groupby('Department').filter(lambda x: x['Salary'].mean() > 75000)
print(filtered)
分组后重置索引
分组后的结果通常是MultiIndex,可以使用reset_index()重置:
grouped = df.groupby('Department')['Salary'].mean().reset_index()
print(grouped)
这些方法可以根据你的具体需求进行组合使用,实现复杂的数据分组和分析任务。
