如何实现股票价格DataFrame每行除以前一行计算价格比率
实现方法
你直接用pandas的shift()方法配合数值列的除法操作就能实现,核心逻辑是把所有股票价格列整体向下偏移1行,再用原数据除以偏移后的数据即可得到你要的比值,操作前需要先保证日期按升序排序,避免顺序错误导致结果异常。
完整可运行代码示例
import pandas as pd # 这里是示例数据构造,你可以替换成自己的原始DataFrame data = { "日期": ["2003-01-03", "2003-01-04", "2003-01-05"], "CSCO": [10, 9, 8], "INTC": [9, 9, 9], "MSFT": [8, 6, 5], "WBA": [6, 4, 3] } df = pd.DataFrame(data) # 按日期升序排序 df = df.sort_values("日期").reset_index(drop=True) # 提取所有股票列(排除日期列) stock_cols = [col for col in df.columns if col != "日期"] # 计算当日价格/前一交易日价格 df[stock_cols] = df[stock_cols] / df[stock_cols].shift(1) # 如果需要保留指定小数位,可以加round方法,比如保留5位:df[stock_cols] = df[stock_cols].round(5) print(df)
输出结果
和你预期的格式完全一致:
| 日期 | CSCO | INTC | MSFT | WBA |
|---|---|---|---|---|
| 2003-01-03 | NaN | NaN | NaN | NaN |
| 2003-01-04 | 0.9 | 1.0 | 0.75 | 0.666667 |
| 2003-01-05 | 0.888889 | 1.0 | 0.833333 | 0.75 |
如果后续需要换算成常规的涨跌幅数据,直接给计算得到的比值减1再乘以100即可。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

