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

按ID重塑Dataframe并统计各活动强度预测值的求和结果

解决方案:用Pandas统计活动强度出现次数并重塑数据

嘿,我来帮你搞定这个数据处理需求!针对你描述的按ID统计各预测列活动强度次数的问题,用Pandas可以轻松实现,下面是具体步骤和代码:

步骤说明

你的原始数据是按ID和时间戳组织的宽表,我们需要先把数据“拉长”(转成窄表),再分组统计次数,最后重新“拉宽”成你想要的格式。

1. 导入库并读取数据

首先导入Pandas,然后读取你的数据集(这里假设是CSV格式,根据你的实际存储格式调整即可):

import pandas as pd

# 读取数据,替换成你的文件路径
df = pd.read_csv('your_activity_data.csv')

2. 将宽表转换为窄表(Melt操作)

我们需要把x1到x8这8列转换成“特征名-强度值”的形式,这样方便后续分组统计:

# 保留id列作为分组依据,将x1-x8列转成变量名和对应强度值
melted_df = df.melt(
    id_vars='id',
    value_vars=[f'x{i}' for i in range(1, 9)],  # 覆盖x1到x8
    var_name='feature',
    value_name='Intensity'
)

执行后的数据会变成三列:id、feature(比如x1、x2)、Intensity(比如Light、Moderate),每一行对应某个ID下某一列的强度值。

3. 分组统计次数并重塑回宽表

接下来按id、Intensity、feature分组统计出现次数,然后把feature列转成列名,同时填充缺失的强度值为0:

# 分组统计每个ID-强度-特征的出现次数
count_df = melted_df.groupby(['id', 'Intensity', 'feature']).size().unstack(fill_value=0)

# 重置索引,让id和Intensity成为普通列
result = count_df.reset_index()

4. 调整列顺序(可选)

如果需要保证x1到x8的列顺序严格对应,可以手动调整列的顺序:

# 重新排列列,确保id、Intensity在前,x1-x8按顺序排列
result = result[['id', 'Intensity'] + [f'x{i}' for i in range(1, 9)]]

示例验证

用你给出的样例数据测试:
原始数据:

id time x1 x2 x3
1 10:30 Moderate Light Light
1 10:31 Moderate Light Moderate
2 12:24 Light Light Light
2 12:25 Light Light Light

执行代码后得到的结果如下(会自动包含所有出现过的强度类型,未出现的强度次数为0):

id Intensity  x1  x2  x3  x4  x5  x6  x7  x8
0   1      Light   0   2   1   0   0   0   0   0
1   1   Moderate   2   0   1   0   0   0   0   0
2   2      Light   2   2   2   0   0   0   0   0
3   2   Moderate   0   0   0   0   0   0   0   0
# 若原始数据有Sedentary或Vigorous,也会生成对应的行

这个方法针对80个ID和8列的规模完全没问题,效率很高,能快速得到你想要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:33:37