pandas按给定条件分组行并保留原有行顺序的实现方法咨询
实现方案
方式1:直接布尔筛选(最简方案,天然保留原始行序)
pandas布尔索引会严格按照原始数据的行顺序匹配筛选条件,不需要额外操作就能保证顺序不变,完全满足后续diff计算的要求:
# 构造筛选条件:Target为1 或 Loss为1 cond = (df['Target'] == 1) | (df['Loss'] == 1) # 筛选行 + 新增Satisfied列 + 保留指定字段 res_df = df.loc[cond, ['date', 'close']].assign(Satisfied=1)
方式2:按date分组实现(满足groupby使用要求)
如果必须使用groupby按日期分组,只要指定sort=False参数即可保留分组的原始出现顺序,组内行顺序也不会改变:
res_df = ( df.groupby('date', sort=False) # 对每个分组筛选满足条件的行 .apply(lambda group: group[(group['Target'] == 1) | (group['Loss'] == 1)]) # 重置索引后保留原始行的索引 .reset_index(level=0, drop=True) # 保留指定字段并新增Satisfied列 .loc[:, ['date', 'close']] .assign(Satisfied=1) )
两种方式得到的结果都会严格遵循原始数据的行顺序,直接对res_df['close']调用diff()方法即可得到正确的相邻行差值,不会出现顺序错乱导致的计算错误。
内容的提问来源于stack exchange,提问作者Huzefa Sadikot
相关产品推荐
相关产品推荐

