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

如何按时间整理用户多次回答,生成宽格式DataFrame?

解决方案

你需要用**透视表(pivot table)**来实现长表转宽表的需求,这比单纯按User ID分组更贴合你的场景。以下是具体实现步骤:

1. 准备示例数据

先还原你提供的原始DataFrame:

import pandas as pd

data = {
    'User ID': ['User A', 'User B', 'User B', 'User B', 'User A', 'User C'],
    'Time': ['2012-01', '2012-02', '2012-01', '2012-03', '2012-02', '2012-03'],
    'Answer': [5, 6, 5, 6, 5, 6]
}
df = pd.DataFrame(data)

2. 生成目标格式的透视表

用pivot_table方法将Time列的取值转为列名,User ID作为行标识,Answer作为填充值,同时直接处理缺失值:

pivot_df = df.pivot_table(
    index='User ID',
    columns='Time',
    values='Answer',
    aggfunc='first',  # 同一用户同一时间多次回答时取第一个,可替换为'mean'/'max'等
    fill_value='X'
).reset_index()

# 移除列名的层级标签,让格式更整洁
pivot_df.columns.name = None

执行后得到的结果与你期望的格式一致(注:原始数据中User A的2012-02回答为5,以下结果为真实处理结果):

User ID2012-012012-022012-03
User A55X
User B566
User CXX6

关键说明

  • aggfunc='first':针对同一用户同一时间有多条回答的场景,该参数用于指定合并规则,根据需求可替换为'mean'(取平均值)、'max'(取最大值)等。
  • fill_value='X':直接将无回答的单元格填充为你指定的X,省去后续单独填充缺失值的步骤。
  • reset_index():将User ID从行索引转回普通列,完全匹配你要的输出结构。

如果你的数据中不存在同一用户同一时间多条回答的情况,也可以用df.pivot(index='User ID', columns='Time', values='Answer').fillna('X').reset_index()实现,但pivot_table的兼容性更强,能处理重复行的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:01:09