如何基于DataFrame计算各年份任职人员的平均年龄?
计算指定年份任职人员的平均年龄
实现思路
核心逻辑是针对每个目标年份,筛选出当年处于任职期的人员(即任职起始年≤目标年份≤任职结束年),再计算这些人员的年龄平均值(年龄=目标年份-出生年份),最终整理成年份与平均年龄对应的表格。
代码实现(基于Pandas)
先导入依赖并构建示例数据集:
import pandas as pd # 示例数据 data = { 'position': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'C', 'C', 'C', 'C'], 'year_start': [2021, 2013, 2006, 2002, 1999, 2007, 2003, 2016, 2010, 2007, 2003], 'year_finish': [2024, 2021, 2012, 2005, 2001, 2024, 2006, 2024, 2015, 2009, 2006], 'year_birth': [1948, 1945, 1957, 1956, 1935, 1959, 1946, 1955, 1949, 1952, 1927] } df = pd.DataFrame(data)
接下来编写计算逻辑:
# 确定要计算的年份范围(从数据中最小任职起始年到最大结束年) target_years = range(df['year_start'].min(), df['year_finish'].max() + 1) result_list = [] for year in target_years: # 筛选当年在职人员 active_employees = df[(df['year_start'] <= year) & (df['year_finish'] >= year)] # 计算平均年龄,处理无人员的情况 avg_age = (year - active_employees['year_birth']).mean() # 整理结果,保留1位小数 result_list.append({ 'year(年份)': year, 'mean age(平均年龄)': round(avg_age, 1) if not pd.isna(avg_age) else None }) # 输出Markdown格式的结果表格 result_df = pd.DataFrame(result_list) print(result_df.to_markdown(index=False))
关键说明
- 筛选逻辑:
(df['year_start'] <= year) & (df['year_finish'] >= year)精准定位当年在职人员 - 年龄计算:直接用目标年份减去出生年份,逻辑简单清晰
- 空值处理:若某一年无在职人员,平均年龄标记为
None,可根据需求调整为0或其他值
部分结果示例
| year(年份) | mean age(平均年龄) |
|---|---|
| 1999 | 64.0 |
| 2000 | 65.0 |
| 2001 | 66.0 |
| 2002 | 46.0 |
| 2003 | 42.3 |
内容的提问来源于stack exchange,提问作者mean_34
相关产品推荐
相关产品推荐

