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

Pandas基于hurdle_lvl列行转列并保留offer_id映射的实现方法

你出现这个问题的核心原因是透视时没有把offer_id加入索引维度,同时cumcount的分组键设置错误,才会丢失offer_id和透视结果的映射关系。以下是可直接得到目标格式的代码:

import pandas as pd

# 第一步:给每个offer_id内部的行生成序号,对应hurdle_1/hurdle_2/hurdle_3的后缀
df['seq'] = df.groupby('offer_id').cumcount() + 1

# 第二步:执行透视,index设为offer_id,列用生成的序号,值取hurdle和reward_value
pivot_df = df.pivot(
    index='offer_id',
    columns='seq',
    values=['hurdle', 'reward_value']
).reset_index()

# 第三步:合并多层列名,调整为你需要的格式
pivot_df.columns = [
    f'{col[0]}_{col[1]}' if col[1] != '' else col[0] 
    for col in pivot_df.columns.to_flat_index()
]

# 第四步:重置索引,得到最终结果
pivot_df = pivot_df.reset_index(drop=True)

如果你的业务逻辑要求严格按照hurdle_lvl字段的值作为列后缀,同一个offer_id存在重复hurdle_lvl时指定聚合规则即可,示例如下:

pivot_df = df.pivot_table(
    index='offer_id',
    columns='hurdle_lvl',
    values=['hurdle', 'reward_value'],
    aggfunc='max' # 可根据需求替换为first/sum/mean等聚合函数
).reset_index()

# 同样调整列名即可
pivot_df.columns = [
    f'{col[0]}_{col[1]}' if col[1] != '' else col[0] 
    for col in pivot_df.columns.to_flat_index()
]
pivot_df = pivot_df.reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:36:01