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

如何结合Groupby与iloc获取股票月度首尾交易日开盘收盘价

解决方案

你原代码的问题在于:直接用schaeffler['Open'].iloc[0]作为聚合函数时,会取整个DataFrame的第一个Open值,而非每个月份分组内首个交易日的Open价格,不符合需求。

正确实现步骤:

  1. 先确保数据按日期排序:要获取每月首个/最后一个交易日的数据,必须保证DataFrame已按Date升序排列:
schaeffler = schaeffler.sort_values('Date')
  1. 分组聚合:使用groupby结合agg,针对不同列指定对应的聚合逻辑:

方式1:自定义单级列名(更直观)

schyr = schaeffler.groupby('Month_Yr').agg(
    月初开盘价=('Open', lambda x: x.iloc[0]),
    月末收盘价=('Close', lambda x: x.iloc[-1]),
    月最高=('High', 'max'),
    月最低=('Low', 'min'),
    成交量均值=('Volume', 'mean'),
    成交量方差=('Volume', 'var'),
    成交量最高=('Volume', 'max'),
    成交量最低=('Volume', 'min')
)
print(schyr)

方式2:保留多级列名(和你原代码结构类似)

schyr = schaeffler.groupby('Month_Yr').agg({
    'Open': ['first'],  # 等价于lambda x: x.iloc[0],前提是日期已排序
    'Close': ['last'],
    'High': ['max'],
    'Low': ['min'],
    'Volume': ['mean', 'var', 'max', 'min']
})
print(schyr)

关键说明:

  • 若你的Date列已经按时间顺序排列,first()和lambda x: x.iloc[0]效果一致;last()和lambda x: x.iloc[-1]效果一致。
  • 如果数据未排序,必须先执行排序步骤,否则取到的“首个/最后一个”会是乱序的,不符合交易日逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:25:18