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

基于分组的Python涨跌幅计算:按起始日期算30/60/90日平均收益率

股票收益率计算实现方案

核心处理步骤

  • 将DATE列转换为datetime格式(适配dd.mm.yyyy日期格式)
  • 按股票代码筛选对应起始日期后的交易数据
  • 计算起始日期后30/60/90天的累计收益率
  • 对三个时间段的收益率取平均值

Python 实现代码

import pandas as pd

# 假设原始数据已加载到DataFrame中
# df = pd.read_csv('stock_data.csv', parse_dates=['DATE'], dayfirst=True)

# 定义各股票的起始日期
start_dates = {
    'APPLE': pd.to_datetime('22.12.2022', dayfirst=True),
    'HARLEY': pd.to_datetime('16.11.2022', dayfirst=True),
    'META': pd.to_datetime('21.10.2021', dayfirst=True)
}

results = {}

for code, start_date in start_dates.items():
    # 筛选当前股票起始日期后的有效数据并按日期排序
    code_data = df[(df['CODE'] == code) & (df['DATE'] >= start_date)].sort_values('DATE')
    
    # 获取起始日收盘价
    initial_price = code_data.iloc[0]['CLOSE PRICE']
    
    # 计算目标日期(起始日+30/60/90天)
    target_periods = {
        '30天收益率(%)': start_date + pd.DateOffset(days=30),
        '60天收益率(%)': start_date + pd.DateOffset(days=60),
        '90天收益率(%)': start_date + pd.DateOffset(days=90)
    }
    
    period_returns = {}
    for period_name, target_date in target_periods.items():
        # 找到目标日期或之后最近的交易日数据
        closest_entry = code_data[code_data['DATE'] >= target_date].iloc[0]
        current_price = closest_entry['CLOSE PRICE']
        # 计算收益率(转换为百分比并保留两位小数)
        period_returns[period_name] = round(((current_price / initial_price) - 1) * 100, 2)
    
    # 计算平均收益率
    avg_return = round(sum(period_returns.values()) / len(period_returns), 2)
    period_returns['平均收益率(%)'] = avg_return
    
    results[code] = period_returns

# 转换为可视化表格
result_table = pd.DataFrame(results).T.reset_index().rename(columns={'index': '股票代码'})
print(result_table)

输出结果示例

股票代码30天收益率(%)60天收益率(%)90天收益率(%)平均收益率(%)
APPLE4.257.8110.327.46
HARLEY-2.101.533.070.83
META12.4520.1025.6719.41

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:43:00