如何按Symbol分组计算DataFrame每日percent change并替换Close列
问题描述
现有如下结构的DataFrame:
Date Close Symbol 0 2018-03-05 44.21 AAPL 1 2018-03-06 44.17 AAPL 2 2018-03-07 43.76 AAPL 3 2018-03-08 44.24 AAPL 4 2018-03-09 44.99 AAPL 5 2018-03-12 45.43 AAPL 6 2018-03-13 44.99 AAPL 7 2018-03-14 44.61 AAPL 8 2018-03-15 44.66 AAPL 9 2018-03-16 44.51 AAPL ... 2506 2023-02-16 50.99 CSCO 2507 2023-02-17 50.77 CSCO 2508 2023-02-21 49.69 CSCO 2509 2023-02-22 49.31 CSCO 2510 2023-02-23 49.21 CSCO 2511 2023-02-24 48.48 CSCO 2512 2023-02-27 48.73 CSCO 2513 2023-02-28 48.42 CSCO 2514 2023-03-01 48.34 CSCO 2515 2023-03-02 48.53 CSCO
需求:按每个Symbol计算每日涨跌幅(percent change),用该值替换Close列,最终返回Date、Close、Symbol格式的结果。曾尝试用groupby方法但未成功。
解决方案
用groupby结合pct_change()就能实现需求,直接看代码:
import pandas as pd # 假设你的DataFrame名为df df['Close'] = df.groupby('Symbol')['Close'].pct_change() # 按要求输出指定列 result = df[['Date', 'Close', 'Symbol']] print(result)
关键说明
groupby('Symbol'):按股票代码分组,确保每个股票的涨跌幅独立计算,不会与其他股票数据混淆pct_change():自动计算当前行与前一行的百分比变化,公式为(当前值 - 前一天值)/前一天值- 每组的第一行结果会是
NaN(无前置数据),如果需要填充该值,比如填充0,可修改为:
df['Close'] = df.groupby('Symbol')['Close'].pct_change().fillna(0)
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

