如何在股票分钟级DataFrame中直接生成包含groupby分组第n行数据的新列
如何在原DataFrame中新增前日分组指定行的价格列?
嘿,我完全get到你的需求了——你已经能用groupby配合nth(1)拿到每日第2行的价格数据,但不想单独生成新DataFrame,而是直接把这些值加到原表的对应日期行里对吧?这其实只需要多一步日期偏移+表合并就能搞定,具体步骤如下:
方法步骤
提取目标数据并调整匹配日期
首先,我们先拿到每日分组第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()合并回原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
相关产品推荐
相关产品推荐

