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

如何按rank_order顺序转置DataFrame并按user_id聚合游戏时长

Pandas DataFrame 行转列聚合方案

核心需求

  • 以user_id为聚合维度
  • 按rank_order的顺序,将对应game值映射为game_1、game_2……game_n列,列顺序严格匹配rank排序
  • 聚合计算每个用户的总游戏时长

实现步骤(基于Pandas原生API,性能最优)

  1. 构造示例测试数据
import pandas as pd

# 匹配提问中的示例数据结构
df = pd.DataFrame({
    'user_id': [1, 1, 1, 2, 2],
    'game': ['Fortnight', 'COD', 'Horizon', 'Fifa2021', 'A Way Out'],
    'game_hours': [1.5, 0.5, 1.7, 1.9, 0.2],
    'rank_order': [1, 2, 3, 1, 2]
})
  1. 透视生成排名对应游戏列
    利用pivotAPI直接行转列,由于rank_order是数值类型,生成的列天然按1到n的顺序排列,添加前缀后直接匹配要求的列名:
game_col_df = df.pivot(
    index='user_id',
    columns='rank_order',
    values='game'
).add_prefix('game_').reset_index()
  1. 聚合计算每个用户总游戏时长
total_hours_df = df.groupby('user_id', as_index=False)['game_hours'].sum()
  1. 合并结果得到最终表
final_df = game_col_df.merge(total_hours_df, on='user_id')

# 若需要将空值替换为空字符串而非默认NaN,可追加以下代码
# final_df = final_df.fillna('')

输出结果

执行代码后得到的final_df结构完全匹配要求:

user_id     game_1     game_2    game_3  game_hours
0        1  Fortnight        COD   Horizon         3.7
1        2   Fifa2021  A Way Out       NaN         2.1

方案说明

  • 列顺序保证:pivot会自动按rank_order数值升序排列列,加前缀后顺序和rank完全对应,无需额外手动排序
  • 性能:全部使用Pandas原生向量化API,无逐行循环逻辑,处理十万到百万级数据效率远高于自定义循环、apply类写法
  • 扩展性:不管单个用户最多有多少条游戏记录,都会自动生成对应数量的game_x列,不需要提前硬编码列名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:01:10