小厂数分实习笔试
第一次笔试,我非常垃圾,涉及Pandas和python
1、数据去重: “按 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 + 2x
def f_prime(x):
return math.exp(x) + 2 * x
# 定义二阶导数 f''(x) = e^x + 2
def f_double_prime(x):
return math.exp(x) + 2
# 牛顿迭代法找极值点
def newton_method(initial_x, epsilon=1e-6):
x = initial_x
while True:
x_next = x - f_prime(x) / f_double_prime(x)
# 检查绝对误差是否小于精度要求
if abs(x_next - x) < epsilon:
return x_next
x = x_next
# 初始值选择(通过观察函数趋势,选 x=0 附近作为初始值)
initial_x = 0
min_x = newton_method(initial_x)
min_value = math.exp(min_x) + min_x ** 2
print(f"函数 f(x) = e^x + x^2 在 x = {min_x:.8f} 处取得最小值")
print(f"最小值为: {min_value:.8f}")
4、写个month_diff函数。计算两个'ym'格式的日期字符串的月份差
from datetime import datetime
def 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')) # 输出:21
5、解析字符串: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)
1、数据去重: “按 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 + 2x
def f_prime(x):
return math.exp(x) + 2 * x
# 定义二阶导数 f''(x) = e^x + 2
def f_double_prime(x):
return math.exp(x) + 2
# 牛顿迭代法找极值点
def newton_method(initial_x, epsilon=1e-6):
x = initial_x
while True:
x_next = x - f_prime(x) / f_double_prime(x)
# 检查绝对误差是否小于精度要求
if abs(x_next - x) < epsilon:
return x_next
x = x_next
# 初始值选择(通过观察函数趋势,选 x=0 附近作为初始值)
initial_x = 0
min_x = newton_method(initial_x)
min_value = math.exp(min_x) + min_x ** 2
print(f"函数 f(x) = e^x + x^2 在 x = {min_x:.8f} 处取得最小值")
print(f"最小值为: {min_value:.8f}")
4、写个month_diff函数。计算两个'ym'格式的日期字符串的月份差
from datetime import datetime
def 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')) # 输出:21
5、解析字符串: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)
全部评论
我也不太会写友友,继续加油吧
相关推荐
点赞 评论 收藏
分享

点赞 评论 收藏
分享