杰瑞科技汇

Python分组Dataframe如何高效实现聚合操作?

Python中分组DataFrame的方法

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

Python分组Dataframe如何高效实现聚合操作?-图1
(图片来源网络,侵删)

使用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()方法应用自定义函数:

Python分组Dataframe如何高效实现聚合操作?-图2
(图片来源网络,侵删)
# 自定义函数计算薪资范围
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()方法根据组条件过滤整个组:

Python分组Dataframe如何高效实现聚合操作?-图3
(图片来源网络,侵删)
# 只保留平均薪资大于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)

这些方法可以根据你的具体需求进行组合使用,实现复杂的数据分组和分析任务。

分享:
扫描分享到社交APP
上一篇
下一篇