Python 堆栈数据框

Python Stack Dataframe

这里是面包车、卡车每小时交通量的数据框:

Date Hour Direction Van Truck
2019-02-01 0 EB 1 2
2019-02-01 0 WB 3 4

下面是我想要的table:

Date Hour Direction Class Count
2019-02-01 0 EB Van 1
2019-02-01 0 EB Truck 2
2019-02-01 0 WB Van 3
2019-02-01 0 WB Truck 4

我尝试了简单的 df.stack() 但失败了,我应该在 stack() 中定义更多吗?

set_index then stack:

import pandas as pd

df = pd.DataFrame({
    'Date': {0: '2019-02-01', 1: '2019-02-01'}, 'Hour': {0: 0, 1: 0},
    'Direction': {0: 'EB', 1: 'WB'}, 'Van': {0: 1, 1: 3}, 'Truck': {0: 2, 1: 4}
})

stacked = df.set_index(['Date', 'Hour', 'Direction']).stack() \
    .reset_index().rename(columns={'level_3': 'Class', 0: 'Count'})

print(stacked)

stacked:

         Date  Hour Direction  Class  Count
0  2019-02-01     0        EB    Van      1
1  2019-02-01     0        EB  Truck      2
2  2019-02-01     0        WB    Van      3
3  2019-02-01     0        WB  Truck      4

melt:

melted = df.melt(id_vars=['Date', 'Hour', 'Direction'],
                 var_name='Class',
                 value_name='Count')
print(melted)

melted:

         Date  Hour Direction  Class  Count
0  2019-02-01     0        EB    Van      1
1  2019-02-01     0        WB    Van      3
2  2019-02-01     0        EB  Truck      2
3  2019-02-01     0        WB  Truck      4