您的位置:首页 > 教育 > 培训 > 网站seo优化推推蛙_宁波网站建设模板下载免费_seovip培训_关键词查询的分析网站

网站seo优化推推蛙_宁波网站建设模板下载免费_seovip培训_关键词查询的分析网站

2025/7/18 9:16:57 来源:https://blog.csdn.net/u013565133/article/details/144907056  浏览:    关键词:网站seo优化推推蛙_宁波网站建设模板下载免费_seovip培训_关键词查询的分析网站
网站seo优化推推蛙_宁波网站建设模板下载免费_seovip培训_关键词查询的分析网站

在实际项目中,df.groupbyapply 结合使用是非常常见的,尤其是在需要根据分组进行复杂计算或动态处理时。apply 方法可以让我们在 groupby 后对每个分组的数据进行逐行操作,甚至应用更复杂的逻辑处理。

场景一:按团队分组,计算每个团队成员的绩效评分,并根据绩效评分的标准给予奖励

假设你正在处理一个员工数据集,包含员工的团队、绩效评分和奖励基准。你想按团队分组,计算每个团队的员工绩效评分的加权平均值,并根据加权平均值给出奖励。

示例:
  1. 我们有一个包含员工团队、绩效评分和奖励基准的 DataFrame
  2. 按照团队分组,计算每个团队的加权绩效评分。
  3. 基于加权评分返回奖励金额(例如,评分大于80的给予500元奖励,评分小于等于80的给予300元奖励)。
import pandas as pd# 创建DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'B', 'B', 'A', 'B'],'performance': [90, 80, 75, 85, 88, 70],'weight': [1.2, 1.5, 1.0, 1.1, 1.3, 1.0]
})# 按团队分组,计算每个团队的加权平均绩效评分,并返回奖励金额
def calculate_reward(group):# 计算加权平均绩效评分weighted_performance = (group['performance'] * group['weight']).sum() / group['weight'].sum()# 根据绩效评分决定奖励金额if weighted_performance > 80:reward = 500else:reward = 300return pd.Series({'avg_performance': weighted_performance, 'reward': reward})# 按照团队分组并应用自定义的计算函数
result = df.groupby('team').apply(calculate_reward)print(result)

输出:

       avg_performance  reward
team                          
A                   85.2     500
B                   77.9     300

解释:

  1. groupby('team'):按团队对员工进行分组。
  2. apply(calculate_reward):对每个分组应用 calculate_reward 函数,计算每个团队的加权平均绩效评分,并根据评分结果决定奖励金额。
  3. 加权绩效评分计算:通过 (group['performance'] * group['weight']).sum() / group['weight'].sum() 计算每个团队的加权平均绩效评分。
  4. 奖励金额计算:根据加权平均绩效评分决定奖励金额,绩效评分 > 80 获得500元奖励,<= 80 获得300元奖励。

场景二:按销售人员分组,计算每人年度销售总额并应用奖励

假设你有一个销售数据集,包含每个销售员的月度销售额,你想计算每个销售员的年度销售总额,并根据销售总额返回不同的奖励。

示例:
  1. 假设 sales_data 包含销售员的月份和销售额。
  2. 按销售员分组,计算年度销售总额。
  3. 基于年度销售总额给予奖励(例如,总额超过100万给予奖金10,000元,否则奖金5,000元)。
# 创建销售数据
df_sales = pd.DataFrame({'salesperson': ['John', 'John', 'Mary', 'Mary', 'John', 'Mary'],'month': ['Jan', 'Feb', 'Jan', 'Feb', 'Mar', 'Mar'],'sales': [20000, 30000, 15000, 20000, 25000, 18000]
})# 按销售员分组,计算每个销售员的年度销售总额,并返回奖励
def calculate_sales_bonus(group):# 计算年度销售总额annual_sales = group['sales'].sum()# 根据年度销售总额决定奖金if annual_sales > 100000:bonus = 10000else:bonus = 5000return pd.Series({'annual_sales': annual_sales, 'bonus': bonus})# 按照销售员分组并应用自定义的计算函数
result_sales = df_sales.groupby('salesperson').apply(calculate_sales_bonus)print(result_sales)

输出:

              annual_sales  bonus
salesperson                       
John                   75000   5000
Mary                   53000   5000

解释:

  1. groupby('salesperson'):按销售员分组。
  2. apply(calculate_sales_bonus):对每个销售员的销售数据应用 calculate_sales_bonus 函数,计算年度销售总额,并根据销售额计算奖金。
  3. 年度销售总额计算:通过 group['sales'].sum() 计算每个销售员的年度销售总额。
  4. 奖金计算:根据年度销售总额判断销售员是否获得10,000元奖励。

场景三:按部门分组,计算每个部门员工的平均工资并加成

假设你有一个员工数据集,包含每个员工所属的部门和工资。你希望按部门分组计算每个部门的平均工资,并根据平均工资加成不同的奖金。

示例:
  1. 假设 employee_data 包含员工的部门和工资。
  2. 按部门分组,计算每个部门的平均工资。
  3. 如果部门的平均工资超过 5000 元,则给每个员工加成 1000 元奖金,否则加成 500 元。
# 创建员工数据
df_employee = pd.DataFrame({'department': ['HR', 'HR', 'Tech', 'Tech', 'Sales', 'Sales'],'salary': [4500, 5200, 6000, 6500, 4000, 5500]
})# 按部门分组,计算每个部门的平均工资,并根据工资加成奖金
def calculate_bonus(group):# 计算部门平均工资avg_salary = group['salary'].mean()# 根据部门的平均工资确定奖金if avg_salary > 5000:bonus = 1000else:bonus = 500return pd.Series({'avg_salary': avg_salary, 'bonus': bonus})# 按部门分组并应用自定义的计算函数
result_employee = df_employee.groupby('department').apply(calculate_bonus)print(result_employee)

输出:

            avg_salary  bonus
department                    
HR                4850    500
Sales             4750    500
Tech              6250   1000

解释:

  1. groupby('department'):按部门分组。
  2. apply(calculate_bonus):对每个部门的员工数据应用 calculate_bonus 函数,计算每个部门的平均工资,并根据平均工资计算奖金。
  3. 平均工资计算:通过 group['salary'].mean() 计算每个部门的平均工资。
  4. 奖金计算:根据部门的平均工资判断奖金金额。

总结:

  • groupbyapply 结合使用,可以灵活地对每个分组的数据应用自定义的计算和逻辑。
  • 上述场景涵盖了实际工作中常见的按部门、团队、销售员等分组后进行加权平均计算、销售额累加以及基于规则进行奖金计算等场景。
  • apply 使得可以对每个分组进行复杂的计算和动态处理,尤其适用于有多列数据参与计算时。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com