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

如何按Time重塑Pandas DataFrame并生成目标格式的新DataFrame?

Pandas按Time排序并调整列顺序的实现方案

原始DataFrame

首先定义初始DataFrame:

import pandas as pd

df = pd.DataFrame({'unit':[1, 1, 1, 1, 1, 
                           2, 2, 2, 
                           3, 3, 3, 3], 
               'time':[1, 2, 3, 4, 5,
                       1, 2, 3,
                       1, 2, 3, 4],
              'signals': [23.2, 23.4, 23.3, 23.5, 23.4,
                         22.1, 22.3, 22.4, 
                         23.8, 23.9, 24.1, 24.0]})

对应的表格:

unittimesignals
1123.2
1223.4
1323.3
1423.5
1523.4
2122.1
2222.3
2322.4
3123.8
3223.9
3324.1
3424.0

目标格式

需要得到按time分组排序、且列顺序为time→unit→signals的DataFrame:

timeunitsignals
1123.2
1222.1
1323.8
2123.4
2222.3
2323.9
3123.3
3222.4
3324.1
4123.5
4324.0
5123.4

原尝试的问题

使用groupby方法无法直接得到目标结果:

new_df = df.groupby('time')
new_df.apply(lambda x: print(x))

存在两个问题:

  • 无法直接交换time和unit列的位置
  • groupby返回的是分组对象,不能直接生成符合结构的DataFrame

解决方案

不需要使用groupby,通过排序+列重排即可快速实现:

分步实现

# 先按time升序排序,同一time下按unit升序排序
sorted_df = df.sort_values(by=['time', 'unit'])
# 调整列顺序为time、unit、signals
target_df = sorted_df[['time', 'unit', 'signals']].reset_index(drop=True)

合并简化

可以将两步合并为一行代码:

target_df = df.sort_values(by=['time', 'unit'])[['time', 'unit', 'signals']].reset_index(drop=True)

关键说明

  • sort_values(by=['time', 'unit']):先按time分组排序,同一time内按unit排序,完全匹配目标的行顺序
  • [['time', 'unit', 'signals']]:直接指定列的顺序,完成time和unit的位置交换
  • reset_index(drop=True):重置索引,清除原DataFrame的旧索引(如果不需要保留原索引可省略)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:40:27