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

如何扁平化Pandas DataFrame:实现单员工单行展示

解决方案

可以通过以下步骤实现需求:

  1. 为每个员工的调动记录添加序号
    按employee_id分组,给每组内的记录分配从1开始的递增序号,后续用这个序号生成对应列名。

  2. 重塑数据结构
    使用pivot方法将长格式数据转为宽格式,以employee_id为索引,序号为列层级,company和transfer_date为值。

  3. 调整列名格式
    将列的层级合并为companyN和transfer_dateN的格式,同时把employee_id从索引转回普通列。

  4. 填充缺失值
    用NaN填充无对应调动记录的列(pandas默认会自动填充)。

完整代码示例

import pandas as pd

# 构造示例数据
data = {
    'employee_id': [1743, 1743, 1743, 1744],
    'company': ['cmp1', 'cmp2', 'cmp3', 'cmp5'],
    'transfer_date': ['2018-04-30', '2018-10-05', '2019-10-23', '2022-11-11']
}
df = pd.DataFrame(data)

# 添加调动序号
df['seq'] = df.groupby('employee_id').cumcount() + 1

# 重塑数据
pivoted = df.pivot(index='employee_id', columns='seq', values=['company', 'transfer_date'])

# 调整列名格式
pivoted.columns = [f'{col[0]}{col[1]}' for col in pivoted.columns]
result = pivoted.reset_index()

# 填充缺失值(可选,默认已为NaN)
result = result.fillna(pd.NA)

print(result)

输出结果

employee_id company1 transfer_date1 company2 transfer_date2 company3 transfer_date3
0         1743     cmp1     2018-04-30     cmp2     2018-10-05     cmp3     2019-10-23
1         1744     cmp5     2022-11-11      NaN            NaN      NaN            NaN

扩展说明

如果员工新增第4次调动记录,只需在原始DataFrame中添加对应行,代码会自动生成company4和transfer_date4列——cumcount()会自动识别新的序号,pivot也会自动扩展列数,无需修改核心逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:20:49