如何按特定规则将Pandas DataFrame数据重排为多列格式?
转换Pandas DataFrame为宽表格式(行:DateTime,列:TypeA/B/C)
原数据示例(创建代码)
假设你的原始DataFrame结构如下,这里给出创建示例代码:
import pandas as pd data = { 'DateTime': ['2024-01-01', '2024-01-01', '2024-01-01', '2024-01-02', '2024-01-02', '2024-01-02'], 'Type': ['TypeA', 'TypeB', 'TypeC', 'TypeA', 'TypeB', 'TypeC'], 'Value': [10, 20, 30, 15, 25, 35] } df = pd.DataFrame(data) df['DateTime'] = pd.to_datetime(df['DateTime']) # 确保DateTime为时间类型,可选但推荐
核心转换方法
方法1:pivot()(无重复值场景)
当每个DateTime+Type组合唯一时,用pivot实现快速转换:
# 生成宽表 wide_df = df.pivot(index='DateTime', columns='Type', values='Value').reset_index() # 移除列层级名称(可选,让表头更简洁) wide_df.columns.name = None
参数说明:
index='DateTime':指定行索引为DateTime列columns='Type':将Type的唯一值(TypeA/TypeB/TypeC)作为新列名values='Value':用Value列的值填充对应单元格reset_index():把DateTime从索引转回普通列(若需保留索引可省略)
方法2:pivot_table()(存在重复值场景)
如果同一DateTime+Type对应多个Value,用pivot_table做聚合处理(示例用求和,可替换为mean/max等):
# 聚合重复值并转换 wide_df = df.pivot_table( index='DateTime', columns='Type', values='Value', aggfunc='sum' # 替换为你需要的聚合函数 ).reset_index() wide_df.columns.name = None
转换后结果示例
最终的wide_df结构如下:
| DateTime | TypeA | TypeB | TypeC |
|---|---|---|---|
| 2024-01-01 | 10 | 20 | 30 |
| 2024-01-02 | 15 | 25 | 35 |
内容的提问来源于stack exchange,提问作者Matthew David Jankowski
相关产品推荐
相关产品推荐

