第一次笔试,我非常垃圾,涉及Pandas和python1、数据去重: “按 X 去重,保留 ID 最大的”按照x排列df_sorted=df.sort_values(by='x')# 按x分组,取id最大值result=df_sorted.groupby('x')['id'].max().reset_index()print(result)2、计算每个种类的违约率import pandas as pd# 构造数据(根据手写内容,假设 class 和 tar 的对应关系如下)data = {"class": ["D", "B", "D", "C", "C", "A", "C", "D", "A", "B", "D", "A", "C", "A", "C"],"tar": [0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1]}df = pd.DataFrame(data)# 按 class 分组,计算违约率(tar==1 的比例)default_rates = df.groupby("class")["tar"].mean()print(default_rates)3、求函数fx=e^x+x^2在何处取得最小值,精度要求:绝对误差小于1e-6,不能调用优化相关包import math# 定义一阶导数 f'(x) = e^x + 2xdef f_prime(x):return math.exp(x) + 2 * x# 定义二阶导数 f''(x) = e^x + 2def f_double_prime(x):return math.exp(x) + 2# 牛顿迭代法找极值点def newton_method(initial_x, epsilon=1e-6):x = initial_xwhile True:x_next = x - f_prime(x) / f_double_prime(x)# 检查绝对误差是否小于精度要求if abs(x_next - x) < epsilon:return x_nextx = x_next# 初始值选择(通过观察函数趋势,选 x=0 附近作为初始值)initial_x = 0min_x = newton_method(initial_x)min_value = math.exp(min_x) + min_x ** 2print(f"函数 f(x) = e^x + x^2 在 x = {min_x:.8f} 处取得最小值")print(f"最小值为: {min_value:.8f}")4、写个month_diff函数。计算两个'ym'格式的日期字符串的月份差from datetime import datetimedef month_diff(ym1, ym2):# 解析日期为年和月y1, m1 = int(ym1[:4]), int(ym1[4:])y2, m2 = int(ym2[:4]), int(ym2[4:])# 计算总月份差return (y1 - y2) * 12 + (m1 - m2)# 验证示例print(month_diff('202001', '201804')) # 输出:215、解析字符串:s='A1:1;b2:13;x5:651;D61:47' 解析为字典格式s = 'A1:1;b2:13;x5:651;D61:47'# 先按分号 ; 分割成多个键值对字符串items = s.split(';')result_dict = {}for item in items:# 再按冒号 : 分割成键和值key, value = item.split(':')# 将值转换为整数(根据需求,也可保留字符串)result_dict[key] = int(value)print(result_dict)