如何用tsfresh实现类似pd.groupby.transform的组特征全行分配功能?
用tsfresh实现类似pandas groupby.transform的分组特征扩展功能
你可以通过提取分组特征后与原DataFrame合并的方式,实现和groupby.transform一致的效果,具体步骤如下:
- 用tsfresh按组提取特征,得到每组一行的特征结果
- 将特征结果与原DataFrame按分组键(即你的
group列)做合并,自动将每组的特征值填充到组内所有行中
示例代码
import pandas as pd import numpy as np from tsfresh import extract_features # 构造符合你描述的示例数据(50个组,每组10行) df = pd.DataFrame({ "group": [i for i in range(1, 51) for _ in range(10)], "value": np.random.randn(500), # 需要提取特征的目标列 "additional_col": np.random.rand(500) # 原数据中的其他列 }) # 用tsfresh按group提取所有可用特征 group_level_features = extract_features( df, column_id="group", # 指定分组列 column_value="value" # 指定要提取特征的数值列 ) # 合并特征到原DataFrame,实现特征的组内全量填充 df_transformed = df.merge(group_level_features, left_on="group", right_index=True)
说明
- tsfresh提取的
group_level_features是50行的DataFrame,索引为group编号 - 通过
merge操作,原DataFrame的每一行都会根据group列匹配到对应的组特征,最终得到500行的结果,每个组的10行共享同一套特征值,完全等价于groupby.transform的效果 - 如果需要提取多列的特征,只需调整
extract_features的参数(比如用column_values指定多列),合并逻辑保持不变
内容的提问来源于stack exchange,提问作者Kartik
相关产品推荐
相关产品推荐

