← 返回题库
初级

综合评估: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
Python 代码 🔒 登录后使用
🔒

登录后即可练习

注册免费账号,在浏览器中直接运行 Python 代码