基于行数据创建列:Pandas DataFrame转换需求
Pandas实现双日期数据的宽表转换
需求说明
将包含两个日期的长格式DataFrame,转换为按「名称」分组,分别展示两个日期对应数值的宽表(「转换前数值」对应较早日期,「转换后数值」对应较晚日期)。
步骤实现
- 构造原始数据(用于复现场景)
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] })
- 核心转换逻辑
由于每个「名称+日期」组合唯一,直接用pivot方法即可快速完成转换:
# 执行透视转换 result = df.pivot(index='名称', columns='日期', values='数值').reset_index() # 重命名列名匹配目标结构 result.columns = ['名称', '转换前数值', '转换后数值']
- 严谨性优化(可选)
如果不确定原始数据的日期顺序,先将日期转为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结构完全一致:
| 名称 | 转换前数值 | 转换后数值 |
|---|---|---|
| A | 0 | 1 |
| B | 1 | 1 |
| C | 1 | 0 |
内容的提问来源于stack exchange,提问作者kstajer
相关产品推荐
相关产品推荐

