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

如何将同ID多行加速度计数据转换为宽格式DataFrame用于机器学习

加速度计数据长格式转宽格式解决方案

我正在将加速度计数据样本合并为单个DataFrame用于机器学习,每个样本含100条数据存于CSV,合并后得到长格式DataFrame:

IDXYZClass
ID 1426动作1
ID 1425动作1
ID 2344动作2
ID 2221动作2
ID 3145动作3
ID 3232动作3
ID 4215动作1
ID 4225动作1

需要转换为宽格式DataFrame适配机器学习:

IDX1Y1Z1X2Y2Z2Class
ID 1426425动作1
ID 2344221动作2
ID 3145232动作3
ID 4215225动作1

已尝试melt、stack/unstack、groupby及for循环,未得到理想结果,求可行方案。


解决方案

核心思路是先给每个ID下的行添加组内序号,再通过pivot实现宽表转换,适配100条数据的样本完全没问题:

步骤1:添加组内序号

对每个ID分组,为组内每行生成从1开始的序号,用来区分同一ID下的不同采样点:

import pandas as pd

# 假设原始长格式数据存储在df中
df['sample_num'] = df.groupby('ID').cumcount() + 1

步骤2:转换为宽格式

用pivot方法,以ID和Class作为索引,sample_num关联列名,X/Y/Z作为值:

wide_df = df.pivot(index=['ID', 'Class'], columns='sample_num', values=['X', 'Y', 'Z'])

步骤3:整理列名并重置索引

把多层列名合并为X1、Y1这种格式,再将ID和Class从索引转回普通列:

# 合并多层列名
wide_df.columns = [f'{col[0]}{col[1]}' for col in wide_df.columns]
# 重置索引
wide_df = wide_df.reset_index()

完整可运行代码

import pandas as pd

# 构造示例数据(实际使用时替换为你的CSV加载代码)
data = {
    'ID': ['ID 1', 'ID 1', 'ID 2', 'ID 2', 'ID 3', 'ID 3', 'ID 4', 'ID 4'],
    'X': [4,4,3,2,1,2,2,2],
    'Y': [2,2,4,2,4,3,1,2],
    'Z': [6,5,4,1,5,2,5,5],
    'Class': ['动作1','动作1','动作2','动作2','动作3','动作3','动作1','动作1']
}
df = pd.DataFrame(data)

# 添加组内序号
df['sample_num'] = df.groupby('ID').cumcount() + 1

# 转换为宽格式
wide_df = df.pivot(index=['ID', 'Class'], columns='sample_num', values=['X', 'Y', 'Z'])

# 整理列名与索引
wide_df.columns = [f'{col[0]}{col[1]}' for col in wide_df.columns]
wide_df = wide_df.reset_index()

print(wide_df)

运行后输出的结果就是目标宽格式DataFrame,针对每个ID下100条数据的场景,会自动生成X1至X100、Y1至Y100、Z1至Z100的列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 08:17:41