不同学位不同学历层次下不同年龄段的人数
需求分析:
按照不同学位不同学历层次下不同年龄段的人数,出生日期举例:20231029
代码:
def agade_teacher(self):
# 读取表格数据,假设表格文件名为data.xlsx
data = pd.read_excel("teacher_high.xlsx", sheet_name='Sheet2')
# 获取当前日期
current_date = datetime.datetime.now()
# 计算年龄,并根据年龄范围进行分类
data['出生日期'] = data['出生日期'].astype(str)
data['出生日期'] = pd.to_datetime(data['出生日期'], format='%Y%m%d')
data['年龄'] = (current_date - data['出生日期']).dt.days // 365 # 计算年龄,以年为单位
# 创建年龄范围的标签
age_bins = [0, 29, 34, 39, 44, 49, 54, 59, 64, 200]
age_labels = ['29岁以下', '30-34岁', '35-39岁', '40-44岁', '45-49岁', '50-54岁', '55-59岁', '60-64岁', '65岁以上']
data['年龄范围'] = pd.cut(data['年龄'], bins=age_bins, labels=age_labels)
# 根据不同学位和学历层次要求进行筛选和统计
degrees = ['硕士', '学士', '无']
education_levels = ['硕士研究生', '大学本科', '大学专科', '高中阶段以下']
result_degrees_education = {}
for degree in degrees:
for education_level in education_levels:
filtered_data = data[(data['所获学位'] == degree) & (data['学历层次'] == education_level)]
result = filtered_data.groupby('年龄范围').size().reset_index(name='人数')
result_degrees_education[f"{degree}-{education_level}"] = result
# 输出不同学位和学历层次要求下的人数
print("按学位和学历层次要求统计:")
for key, result in result_degrees_education.items():
print(f"学位和学历层次: {key}")
print(result)
print()
重要知识点:
data['出生日期'] = pd.to_datetime(data['出生日期'], format='%Y%m%d'):
使用 pd.to_datetime 函数将字符串日期转换为 Pandas 中的日期时间数据类型。format='%Y%m%d' 表示日期的格式是年-月-日。
data['年龄'] = (current_date - data['出生日期']).dt.days // 365: 这行代码计算了一个新的列 '年龄',通过当前日期 current_date 减去 '出生日期' 列来获取日期间隔。dt.days 返回日期间隔的天数,// 365 将总天数转换为年数。
//::Python中两个斜杠即双斜杠(//)表示地板除,即先做除法(/),然后向下取整(floor)
cut函数:见前文
result = filtered_data.groupby('年龄范围').size().reset_index(name='人数'):
此行代码使用 groupby 函数按照 '年龄范围' 对已筛选的数据进行分组,然后使用 size 方法计算每个年龄范围的人数。最后,reset_index 用于重置索引,并为 '人数' 这一新的列指定名称。 reset_index(name='人数') 将创建一个新的 DataFrame,其中包含 '年龄范围' 作为索引,以及 '人数' 作为列,显示每个年龄范围内的人数统计。
result_degrees_education[f"{degree}-{education_level}"] = result:
将名为 result 的 Series 或 DataFrame(存储在 result 变量中)赋值给名为 result_degrees_education[f"{degree}-{education_level}"] 的 DataFrame 中的某一列。