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

如何在Pandas中按ID分组对列应用Butterworth滤波器并保留原索引?

解决Pandas按ID分组应用Butterworth滤波器后保留原索引的问题

你的代码核心问题是自定义的smoothing函数没有返回处理后的DataFrame,导致groupby.apply无法正确拼接分组结果。以下是修正方案:

修正后的代码

import pandas as pd
import scipy.signal as signal

data = [['id1', 1], ['id1', 1], ['id1', 5], ['id1', 5],['id1', 5],['id1', 1], ['id1', 1], ['id1', 5], ['id1', 5], ['id1', 5],['id2', 1], ['id2', 2], ['id2', 5], ['id2', 3],['id2', 1], ['id2', 1], ['id2', 2],['id2', 2], ['id2', 5], ['id2', 3]]

df = pd.DataFrame(data, columns=['id', 'raw_data'])

def smoothing(df):
    N=2
    w=.005
    B,A=signal.butter(N, w, output='ba')
    smooth_data= signal.filtfilt(B,A,df['raw_data'])
    # 赋值新列后返回当前分组的DataFrame
    return df.assign(smooth_data=smooth_data)

# 分组应用函数后自动合并为原结构的DataFrame,保留原索引
df = df.groupby('id', group_keys=False).apply(smoothing)

关键说明

  • 在smoothing函数末尾添加return df,确保每个分组处理完成后返回包含新列smooth_data的完整DataFrame
  • 添加group_keys=False参数可以避免分组键被添加为多级索引的一部分,让结果的索引完全和原DataFrame一致
  • 执行后得到的df会保留原有的行索引,同时新增处理后的smooth_data列,结构和原DataFrame完全匹配

内容的提问来源于stack exchange,提问作者Sangeetha R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:45:25