You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pycharm中Fama-French数据集处理卡壳(步骤3及以后)求助

Fama-French月度数据集处理剩余步骤解决方案

已完成代码回顾

import pandas as pd
ff_monthly = pd.read_csv(r"file path")
ff_monthly = pd.read_csv(r"file path", index_col=0)
Mkt = ff_monthly['Mkt-RF'] + ff_monthly['RF']
ff_monthly = ff_monthly.assign(Mkt=Mkt)
df = pd.DataFrame(ff_monthly)

剩余任务分步实现

1. 从索引提取年份和月份,新增列

假设数据集索引为YYYYMM格式(如192607代表1926年7月),通过字符串切片提取年月:

# 将索引转为字符串类型方便切片
df.index = df.index.astype(str)
# 提取年份和月份并转为数值型
df['Year'] = df.index.str[:4].astype(int)
df['Month'] = df.index.str[4:].astype(int)

2. 创建年度统计结果DataFrame

提取数据中所有唯一年份,初始化用于存储年化指标的空DataFrame:

# 获取所有唯一年份并排序
years = df['Year'].unique()
years.sort()
# 创建以年份为索引、包含指定列的结果表
annual_stats = pd.DataFrame(index=years, columns=['Mean', 'Standard Deviation'])

3. 年化转换函数

编写函数接收小数形式的月度均值和标准差,返回对应的年化均值与标准差元组:

def annualize(r_m, s_m):
    # 计算年化均值:(1+月度均值)^12 - 1
    r_a = (1 + r_m) ** 12 - 1
    # 计算年化标准差:月度标准差 * 根号12
    s_a = s_m * (12 ** 0.5)
    return (r_a, s_a)

4. 按年份计算年化指标并输出结果

遍历每个年份,计算Mkt列的月度统计值,转成小数后传入函数得到年化值,最后打印结果并保存为CSV:

for year in years:
    # 筛选当年Mkt数据,将百分比转为小数
    yearly_data = df[df['Year'] == year]['Mkt'] / 100
    # 计算月度均值和标准差
    monthly_mean = yearly_data.mean()
    monthly_std = yearly_data.std()
    # 调用函数获取年化指标
    annual_mean, annual_std = annualize(monthly_mean, monthly_std)
    # 填充结果表
    annual_stats.loc[year, 'Mean'] = annual_mean
    annual_stats.loc[year, 'Standard Deviation'] = annual_std

# 打印最终结果
print(annual_stats)
# 输出为CSV文件(可自定义保存路径)
annual_stats.to_csv('ff_annual_mkt_stats.csv')

完整整合代码

import pandas as pd

# 加载数据(替换为你的实际文件路径)
ff_monthly = pd.read_csv(r"file path", index_col=0)
# 计算Mkt列
Mkt = ff_monthly['Mkt-RF'] + ff_monthly['RF']
ff_monthly = ff_monthly.assign(Mkt=Mkt)
df = pd.DataFrame(ff_monthly)

# 1. 提取年份和月份
df.index = df.index.astype(str)
df['Year'] = df.index.str[:4].astype(int)
df['Month'] = df.index.str[4:].astype(int)

# 2. 创建年度统计DataFrame
years = df['Year'].unique()
years.sort()
annual_stats = pd.DataFrame(index=years, columns=['Mean', 'Standard Deviation'])

# 3. 年化转换函数
def annualize(r_m, s_m):
    r_a = (1 + r_m) ** 12 - 1
    s_a = s_m * (12 ** 0.5)
    return (r_a, s_a)

# 4. 按年份计算并填充结果
for year in years:
    yearly_data = df[df['Year'] == year]['Mkt'] / 100
    monthly_mean = yearly_data.mean()
    monthly_std = yearly_data.std()
    annual_mean, annual_std = annualize(monthly_mean, monthly_std)
    annual_stats.loc[year, 'Mean'] = annual_mean
    annual_stats.loc[year, 'Standard Deviation'] = annual_std

# 输出结果
print(annual_stats)
annual_stats.to_csv('ff_annual_mkt_stats.csv')

内容的提问来源于stack exchange,提问作者XYZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 01:45:36