我有以下pandas数据框(水平向右漫步以查看所有列):

SIBT                SOBT                PLANNED_ARR_HOUR    PLANNED_DEP_HOUR    ARRIVAL_FLIGHT_HAUL  DEPARTURE_FLIGHT_HAUL
2016-01-01 04:05:00 2016-01-01 14:10:00 4                   14                  Ultra Long Haul      Long Haul
2016-01-01 04:25:00 2016-01-01 06:30:00 4                   6                   Ultra Long Haul      Short Haul
2016-01-01 05:05:00 2016-01-01 07:05:00 5                   7                   Long Haul            Long Haul
2016-01-01 05:20:00 2016-01-01 10:40:00 5                   10                  Short Haul           Long Haul
2016-01-01 05:25:00 2016-01-01 10:50:00 5                   10                  Long Haul            Long Haul

我需要合并列SIBTSOBTPLANNED_ARR_HOURPLANNED_DEP_HOURARRIVAL_FLIGHT_HAULDEPARTURE_FLIGHT_HAUL以获得新的数据帧,如下所示:
DATETIME             PLANNER_HOUR     FLIGHT_HAUL       TYPE
2016-01-01 04:05:00  4                Ultra Long Haul   ARR
2016-01-01 14:10:00  14               Long Haul         DEP
2016-01-01 04:25:00  4                Ultra Long Haul   ARR
2016-01-01 06:30:00  6                Short Haul        DEP
...

基本上,每一行应该分成两行,以便到达(ARR)和离开(DEP)。
SIBTPLANNED_ARR_HOURARRIVAL_FLIGHT_HAUL指的是arr(到达)类型。
SOBTPLANNED_DEP_HOURDEPARTURE_FLIGHT_HAUL指DEP(出发)类型。
我该怎么做?

最佳答案

我认为最简单的方法是逐列从原始表中提取到达和离开,重命名列并重新组合。例如

arrive = data[ ['SIBT', 'PLANNED_ARR_HOUR', 'ARRIVAL_FLIGHT_HAUL'] ]
depart = data[ ['SOBT', 'PLANNED_DEP_HOUR', 'DEPARTURE_FLIGHT_HAUL'] ]

现在有两个具有相关列的数据帧,请将两个数据帧的列名更改为所需的输出。
arrive.columns = ['DATETIME', 'PLANNER_HOUR', 'FLIGHT_HAUL']
depart.columns = ['DATETIME', 'PLANNER_HOUR', 'FLIGHT_HAUL']

添加类型列。
arrive['TYPE'] = 'ARR'
depart['TYPE'] = 'DEP'

现在它们有了相同的列名,可以像普通列名那样连接起来。
result = pd.concat([arrive, depart])

10-08 01:25