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

如何在股票分钟级DataFrame中直接生成包含groupby分组第n行数据的新列

如何在原DataFrame中新增前日分组指定行的价格列?

嘿,我完全get到你的需求了——你已经能用groupby配合nth(1)拿到每日第2行的价格数据,但不想单独生成新DataFrame,而是直接把这些值加到原表的对应日期行里对吧?这其实只需要多一步日期偏移+表合并就能搞定,具体步骤如下:

方法步骤

  1. 提取目标数据并调整匹配日期
    首先,我们先拿到每日分组第2行的价格数据,然后用shift(-1)把日期往后偏移一天——这样原数据里1月11日的行,就能匹配到1月10日的那组目标数据了:

    # 获取每日第2行的价格数据,同时将日期偏移为次日(用于和原表匹配)
    prev_day_nth1_data = bn_futures.groupby('Date')['Open','High','Low','Close'].nth(1).shift(-1).reset_index()
    
  2. 合并回原DataFrame
    接着把这个小数据集和原DataFrame用Date列做连接,就能直接在原表中新增对应列了,还可以用suffixes给新增列加个标识:

    # 合并到原表,新增列会带上_prev_day_nth1后缀
    bn_futures = bn_futures.merge(prev_day_nth1_data, on='Date', suffixes=('', '_prev_day_nth1'))
    

简化场景(仅需某一列)

如果你只需要某一列的前日第2行数据(比如收盘价),可以更精简:

# 仅提取Close列的前日第2行数据,并重命名列名
prev_day_close_nth1 = bn_futures.groupby('Date')['Close'].nth(1).shift(-1).reset_index(name='Prev_Day_Close_Nth1')
# 合并到原表
bn_futures = bn_futures.merge(prev_day_close_nth1, on='Date')

补充说明

如果某一天的分组数据不足2行(比如当天只有1条分钟数据),nth(1)会返回NaN,合并后原表对应日期的新增列也会是NaN,你可以根据业务需求用fillna()做后续处理~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:52:37