什么';在Python中堆叠多级透视表的有效方法是什么?

什么';在Python中堆叠多级透视表的有效方法是什么?,python,pandas,pivot-table,Python,Pandas,Pivot Table,给定以下数据帧: test_df = pd.DataFrame({'date': ['2020-01-01', '2020-01-01', '2020-01-01', '2020-01-02', '2020-01-02', '2020-01-02'], 'A': [1,2,3,4,5,6], 'B': ['a', 'b', 'c', 'd', 'e', 'f'], 'C': ['aa', 'bb', 'cc', 'dd', 'ee', 'ff'], 'val': [100, 200, 300,

给定以下数据帧:

test_df = pd.DataFrame({'date': ['2020-01-01', '2020-01-01', '2020-01-01', '2020-01-02', '2020-01-02', '2020-01-02'], 'A': [1,2,3,4,5,6], 'B': ['a', 'b', 'c', 'd', 'e', 'f'], 'C': ['aa', 'bb', 'cc', 'dd', 'ee', 'ff'], 'val': [100, 200, 300, 400, 500, 600]})
test_df['date'] = pd.to_datetime(test_df['date'])
我形成以下数据透视表(这样做的原因超出了本问题的范围):

假设在我执行一些操作(例如重新采样日期时间索引)之后,我希望它恢复为原始的表格形式。最有效的方法是什么

我目前的做法是:

test_pivot_table.stack().stack().stack().to_frame('val').reset_index()
但是,对于较大的数据帧,三重
stack()
操作速度慢且占用大量内存。

用于删除缺少的值:

print (test_pivot_table.unstack().dropna().reset_index(name='val'))
   A  B   C       date    val
0  1  a  aa 2020-01-01  100.0
1  2  b  bb 2020-01-01  200.0
2  3  c  cc 2020-01-01  300.0
3  4  d  dd 2020-01-02  400.0
4  5  e  ee 2020-01-02  500.0
5  6  f  ff 2020-01-02  600.0

test\u pivot\u table.unstack().reset\u index()
print (test_pivot_table.unstack().dropna().reset_index(name='val'))
   A  B   C       date    val
0  1  a  aa 2020-01-01  100.0
1  2  b  bb 2020-01-01  200.0
2  3  c  cc 2020-01-01  300.0
3  4  d  dd 2020-01-02  400.0
4  5  e  ee 2020-01-02  500.0
5  6  f  ff 2020-01-02  600.0