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

Python中pivot DataFrame指定值转为表头,按id/date分组聚合的实现方法

实现代码

import pandas as pd

# 1. 构造分类值的计数哑变量,仅保留需要统计的hi、hey
# 处理type列的计数
type_dummies = pd.get_dummies(df['type'])[['hi', 'hey']]
# 处理de_type列的计数,避免列名重复先加临时后缀
de_type_dummies = pd.get_dummies(df['de_type'], suffix='_de')[['hi_de', 'hey_de']]
# 合并回原表
df = pd.concat([df, type_dummies, de_type_dummies], axis=1)

# 2. 按id、date分组聚合
result = df.groupby(['id', 'date'], as_index=False).agg(
    # type相关统计
    hey=('hey', 'sum'),
    hi=('hi', 'sum'),
    total=('type', 'count'),
    sum=('pwr', 'sum'),
    # de_type相关统计
    hey_de=('hey_de', 'sum'),
    hi_de=('hi_de', 'sum'),
    totald=('de_type', 'count'),
    desum=('de_pwr', 'sum'),
    # 固定字段取第一个值即可
    base=('base', 'first'),
    base_pos=('base_pos', 'first')
)

# 3. 调整列名匹配预期输出,重命名de相关的hi、hey列
result.columns = ['id', 'date', 'hey', 'hi', 'total', 'sum', 'hey', 'hi', 'totald', 'desum', 'base', 'base_pos']

# 可选:所有数值列统一转int,避免空值导致的浮点数问题
result = result.fillna(0).astype({col: 'int' for col in result.columns if col not in ['id', 'date']})

逻辑说明

  • 先用pd.get_dummies把type和de_type的目标枚举值转成0/1计数列,方便分组后直接求和得到各值的出现次数
  • 分组聚合时分别统计两类指标的计数、求和结果,固定属性base和base_pos同一个分组下值一致,取第一个即可
  • 最后调整列名即可匹配你给出的预期输出格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 22:57:04