初级
综合评估:Altman Z-Score计算
未完成
初级参考
完整示例代码供参考,建议自己理解后重新输入
"""
金融风险管理 - q083
综合财务评估:Z-Score计算(Altman模型)
"""
metadata = {
"id": "q083",
"title": "综合评估:Altman Z-Score计算",
"module": "综合财务风险评估",
"difficulty": "beginner",
"data_files": ["zscore.csv"],
"skills": ["Z-Score", "Altman模型", "破产预测"],
"estimated_minutes": 8
}
"""
【题目】
读取zscore.csv,筛选2023年数据,按Z-Score区间分类:
- Z > 2.99:安全区
- 1.81 <= Z <= 2.99:灰色区间(不确定)
- Z < 1.81:危险区
计算各区间公司数量和占比。
输出DataFrame,包含:区间名称、Z-Score范围、公司数量、占比(保留4位小数)
并输出一行汇总:ZScore中位数(保留4位小数)
"""
def solve():
import pandas as pd
from pyodide.http import open_url
from io import StringIO
BASE_URL = "https://data.zuihe.com/finance/"
zs = pd.read_csv(StringIO(open_url(BASE_URL + "zscore.csv").read()))
df = zs[zs['Accper'] == '2023-12-31'].dropna(subset=['ZScore'])
total = len(df)
zones = [
('安全区', 'Z > 2.99', (df['ZScore'] > 2.99).sum()),
('灰色区间', '1.81 <= Z <= 2.99', ((df['ZScore'] >= 1.81) & (df['ZScore'] <= 2.99)).sum()),
('危险区', 'Z < 1.81', (df['ZScore'] < 1.81).sum()),
]
rows = [{'区间名称': name, 'Z-Score范围': rng,
'公司数量': n, '占比': round(n / total, 4)} for name, rng, n in zones]
result = pd.DataFrame(rows).to_string()
median = round(df['ZScore'].median(), 4)
return result + f"
ZScore中位数: {median}"
if __name__ == "__main__":
print(solve())
示例
输入
solve()
期望输出
区间名称 Z-Score范围 公司数量 占比 | 0 安全区 Z > 2.99 249 0.5264 | 1 灰色区间 1.81 <= Z <= 2.99 108 0.2283 | 2 危险区 Z < 1.81 116 0.2452 | | ZScore中位数: 3.1285
👑
升级 VIP
解锁全部题目,畅通无阻地学习
- ✓ 解锁全部训练包所有题目
- ✓ 查看完整参考代码和提示
- ✓ 浏览器内直接运行 Python 代码
- ✓ 自动批改 + 进度追踪
30天
¥18
1年
¥99
2年
¥158
3年
¥199