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

如何对分组后的DataFrame进行滚动旋转并同步Index?

分组后同步滚动DataFrame行与索引的解决方案

核心是要让分组后的整行数据(含索引列)一起循环滚动,而非仅滚动数值列。之前的问题大概率是只对数值列做了滚动,未同步处理索引列,或滚动后未正确重置每组内部索引。

示例数据构造

先模拟你的场景:

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({
    'idx': [1,2,3,4,5,6],
    'ValueA': ['a','a','a','b','b','b'],
    'ValueB': [10,20,30,40,50,60]
})

正确的分组滚动实现

定义滚动函数时,对每组所有列执行循环移位,再重置每组内部默认索引:

def roll_group(group, shift=2):
    # 对整组数据的行执行循环滚动,shift为正表示向后滚
    rolled_data = np.roll(group.values, shift, axis=0)
    # 重新构造DataFrame并保留原列名
    rolled_group = pd.DataFrame(rolled_data, columns=group.columns)
    # 重置每组内部索引,避免原索引干扰
    rolled_group.reset_index(drop=True, inplace=True)
    return rolled_group

# 按ValueA分组后应用滚动函数
result_df = df.groupby('ValueA', group_keys=False).apply(roll_group, shift=2)

结果验证

执行后result_df输出如下,可见每组的idx与ValueB同步向后滚动2位(循环移位):

idx ValueA ValueB
0    2      a     20
1    3      a     30
2    1      a     10
3    5      b     50
4    6      b     60
5    4      b     40

之前方法失败的原因

  • 若仅对ValueB列单独执行shift操作,idx列不会同步移动,必然出现数值与索引脱节。
  • 直接对整体结果reset_index,只会重置全局索引,无法修正每组内的行顺序。

适配find_peaks的提示

滚动完成后,可直接对每组的ValueB列调用scipy.signal.find_peaks——循环移位后边缘峰值会被移至数据中间区域,更便于检测。

内容的提问来源于stack exchange,提问作者J.S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:23:23