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

使用tsfresh按指定时间窗口提取DataFrame特征报错求助

原代码核心错误
  • 函数内引用未定义的time变量,运行会直接触发NameError。
  • 时间窗口配对逻辑缺失:未先按参与者id分组整理窗口端点,直接按索引切片会混淆不同参与者的时间范围;且原逻辑默认时间窗口是连续排列的全局切片,和实际按id配对的规则不符。
  • tsfresh接口传参错误:extract_features要求输入包含分组id字段的DataFrame,原代码按DataFrame列逐列apply,传入的是单独的B1/B2/B3序列,不存在id字段,完全不符合接口输入要求。
  • 循环逻辑错误:return语句写在for循环内部,第一次迭代就会终止函数,无法遍历所有时间窗口。
  • 维度不匹配:tsfresh输出的是每个分组对应数百个特征列,原代码直接将多列特征赋值给原始单列的切片,会触发维度对齐错误。
  • 存在变量拼写错误:extracted_freatures拼写错误,正确写法为extracted_features。
正确实现代码

先整理结构化时间窗口,再逐窗口截取数据,最后调用tsfresh批量提取特征,避免逐行逐列循环的低效问题:

import pandas as pd
from tsfresh import extract_features

# 1. 按参与者id整理配对时间窗口
window_records = []
for uid, group in time_window.groupby("id"):
    # 同一id的时间点排序后相邻两个组成[起始,结束]窗口
    time_points = group["time"].sort_values().to_list()
    for idx in range(0, len(time_points), 2):
        window_records.append({
            "window_id": f"{uid}_{time_points[idx]}_{time_points[idx+1]}",
            "id": uid,
            "start_t": time_points[idx],
            "end_t": time_points[idx+1]
        })
window_meta = pd.DataFrame(window_records)

# 2. 截取所有窗口对应的原始数据片段,打窗口标签
segment_list = []
for _, win in window_meta.iterrows():
    # 筛选同id、时间落在窗口闭区间内的数据
    cur_seg = df[
        (df["id"] == win["id"]) &
        (df["time"] >= win["start_t"]) &
        (df["time"] <= win["end_t"])
    ].copy()
    cur_seg["window_id"] = win["window_id"]
    segment_list.append(cur_seg)
all_segments = pd.concat(segment_list, ignore_index=True)

# 3. 按窗口批量提取时序特征
extracted_features = extract_features(
    all_segments,
    column_id="window_id",  # 按窗口id分组,每个窗口输出一行特征
    column_sort="time"      # 按时间列排序保证时序顺序正确
)

# 关联窗口元信息,方便识别每个特征行对应的参与者和时间范围
extracted_features = extracted_features.reset_index().rename(columns={"index": "window_id"})
extracted_features = extracted_features.merge(window_meta, on="window_id", how="left")
结果说明
  • 最终输出每一行对应一个独立的时间窗口,window_id格式为参与者ID_窗口起始时间_窗口结束时间,可直接区分不同参与者的不同窗口片段。
  • 输出列分为两类:一类是窗口基础信息(参与者id、窗口起始/结束时间),其余列均为tsfresh默认配置下计算的B1/B2/B3字段时序特征,包含统计值、趋势特征、自相关特征等,具体特征数量以tsfresh默认计算结果为准。
  • 如果需要自定义提取的特征范围,可给extract_features传入default_fc_parameters参数,指定需要计算的特征函数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 11:24:10