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

基于行数据创建列:Pandas DataFrame转换需求

Pandas实现双日期数据的宽表转换

需求说明

将包含两个日期的长格式DataFrame,转换为按「名称」分组,分别展示两个日期对应数值的宽表(「转换前数值」对应较早日期,「转换后数值」对应较晚日期)。

步骤实现

  1. 构造原始数据(用于复现场景)
import pandas as pd

df = pd.DataFrame({
    '日期': ['01-01-2022', '01-01-2022', '01-01-2022', '02-01-2022', '02-01-2022', '02-01-2022'],
    '名称': ['A', 'B', 'C', 'A', 'B', 'C'],
    '数值': [0, 1, 1, 1, 1, 0]
})
  1. 核心转换逻辑
    由于每个「名称+日期」组合唯一,直接用pivot方法即可快速完成转换:
# 执行透视转换
result = df.pivot(index='名称', columns='日期', values='数值').reset_index()
# 重命名列名匹配目标结构
result.columns = ['名称', '转换前数值', '转换后数值']
  1. 严谨性优化(可选)
    如果不确定原始数据的日期顺序,先将日期转为datetime类型并排序,确保「转换前/后」对应正确的时间顺序:
# 转换日期格式并按时间排序
df['日期'] = pd.to_datetime(df['日期'], format='%d-%m-%Y')
df = df.sort_values('日期')

# 再次执行透视和列名重命名
result = df.pivot(index='名称', columns='日期', values='数值').reset_index()
result.columns = ['名称', '转换前数值', '转换后数值']

最终结果

转换后的result与目标DataFrame结构完全一致:

名称转换前数值转换后数值
A01
B11
C10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:35:27