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

如何用Python对多列值升序排序并透视,按ID整理时序位置数据?

Pandas按ID分组并将时序数据转换为结构化多列

需要处理一个包含datetime类型列start的Pandas DataFrame,实现以下操作:

  • 按ID字段分组
  • 每个分组内按照start时间先后对location和start数据排序
  • 将排序后的数据转换为location1、start1、location2、start2这类结构化多列形式

示例数据

import pandas as pd

df = pd.DataFrame(data={'ID':['a1','a2','a1','a1','a2','a2'],
                       'location':['bali','mosta','road','joha','alabama','vinice'], 
                       'start':[pd.to_datetime('2022-11-18 16:28:35'),
                                pd.to_datetime('2022-11-18 17:28:35'),
                                pd.to_datetime('2022-11-19 16:28:35'),
                                pd.to_datetime('2022-11-19 17:28:35'),
                                pd.to_datetime('2022-11-19 17:18:35'),
                                pd.to_datetime('2022-11-19 17:18:35')
                               ]}) 

原始数据展示:

ID location               start
0  a1     bali 2022-11-18 16:28:35
1  a2    mosta 2022-11-18 17:28:35
2  a1     road 2022-11-19 16:28:35
3  a1     joha 2022-11-19 17:28:35
4  a2  alabama 2022-11-19 17:18:35
5  a2   vinice 2022-11-19 17:18:35

解决方案

# 按ID分组,每组内按start排序后添加行序号
df_sorted = df.sort_values(['ID', 'start']).groupby('ID').cumcount() + 1

# 透视数据,将序号作为列的区分标识
result = df.assign(num=df_sorted).pivot(index='ID', columns='num', values=['location', 'start'])

# 重命名列,转为location1、start1的格式
result.columns = [f'{col[0]}{col[1]}' for col in result.columns]

# 重置索引,让ID成为普通列
result = result.reset_index()

预期结果

对应示例结果的代码:

new_data = pd.DataFrame(data={'ID':['a1','a2',],
      'location1':['bali','mosta'],
       'start1':[pd.to_datetime('2022-11-18 16:28:35'),pd.to_datetime('2022-11-18 17:28:35') ],
        'location2':['road','alabama'],
        'start2': [pd.to_datetime('2022-11-19 16:28:35'),pd.to_datetime('2022-11-19 17:18:35')],
      'location3':['joha','vinice'],
     'start3': [pd.to_datetime('2022-11-19 17:28:35'),pd.to_datetime('2022-11-19 17:18:35')],
                          }) 

结果展示:

ID location1             start1 location2             start2 location3             start3
0  a1       bali 2022-11-18 16:28:35       road 2022-11-19 16:28:35       joha 2022-11-19 17:28:35
1  a2      mosta 2022-11-18 17:28:35    alabama 2022-11-19 17:18:35     vinice 2022-11-19 17:18:35

内容的提问来源于stack exchange,提问作者phœnix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:25:25