如何在DataFrame中按公司分组高效计算股票日收益率
高效实现方案
完全不需要提取唯一公司名再循环计算,用Pandas原生的矢量化分组操作即可实现,代码更简洁,处理大数据集时效率比手动循环高数十倍。
前置操作(必做)
首先要确保每个公司的记录按日期升序排列,避免时序错乱导致收益率计算错误:
import pandas as pd # 转换日期列为datetime类型,防止字符串排序出错 df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y') # 按公司名、日期升序排序,重置索引 df = df.sort_values(by=['Company Name', 'Date'], ignore_index=True)
核心计算代码
仅需一行即可完成日收益率计算:
# 按公司分组计算股价涨跌幅,默认第一条记录返回NaN,符合需求 df['Daily Returns'] = df.groupby('Company Name')['stock price'].pct_change() # 若需要和示例输出一致保留1位小数,改成下行代码即可 # df['Daily Returns'] = df.groupby('Company Name')['stock price'].pct_change().round(1)
原理说明
pct_change()是Pandas内置的涨跌幅计算方法,公式为(当前值 - 前序值) / 前序值,分组后会单独为每个公司的序列计算,自动将每个公司第一条无前置参考的记录返回NaN,不需要额外做判断处理。所有操作均为底层C实现的矢量化运算,避免了Python层循环的性能开销。
内容的提问来源于stack exchange,提问作者viperjonis
相关产品推荐
相关产品推荐

