按枢轴值 Python 对枢轴 table 进行排序

Sorting pivot table by the pivot value Python

我下面有这个数据框,它想按周旋转,但输出中的周值从最新日期到最早日期排序。

data = {'CustomerID': ['001', '002', '003', '004'], 'Name': [ 'Tom', 'Joseph', 'Krish', 'John'], 'ClosingDate': ['02/05/2021', '09/05/2021', '18/04/2021', '24/04/2021'], 'Quantity': [5, 6, 19, 4], 'Week': ['Quantity for Week Ending 02/05/2021', 'Quantity for Week Ending 09/05/2021', 'Quantity for Week Ending 18/04/2021', 'Quantity for Week Ending 24/04/2021']}
# Create DataFrame.
df = pd.DataFrame(data)

枢轴 table 如下:-

pivot_table = df.pivot_table('Quantity', ['CustomerID','Name','ClosingDate'], 'Week', aggfunc='sum').fillna(0).reset_index()

输出如下:

Week    CustomerID  Name    ClosingDate Quantity for Week Ending 02/05/2021 Quantity for Week Ending 09/05/2021 Quantity for Week Ending 18/04/2021 Quantity for Week Ending 24/04/2021
0        001        Tom       02/05/2021    5.0                                0.0                                             0.0                       0.0
1        002        Joseph    09/05/2021    0.0                                6.0                                             0.0                       0.0
2        003        Krish     18/04/2021    0.0                                0.0                                             19.0                      0.0
3        004        John      24/04/2021    0.0                                0.0                                             0.0                       4.0

我怎样才能让这个枢轴 table 输出如下,从数据集中的最新日期到最旧的日期?

Week    CustomerID  Name    ClosingDate Quantity for Week Ending 09/05/2021 Quantity for Week Ending 02/05/2021     Quantity for Week Ending 24/04/2021 Quantity for Week Ending 18/04/2021 
0        001        Tom       02/05/2021    0.0                               5.0                                             0.0                        0.0
1        002        Joseph    09/05/2021    6.0                               0.0                                             0.0                        0.0
2        003        Krish     18/04/2021    0.0                                0.0                                            0.0                        19.0
3        004        John      24/04/2021    0.0                                0.0                                            4.0                        0.00        

尝试:

sorted_weeks = sorted(
    df["Week"], key=lambda k: k.split()[-1].split("/")[::-1], reverse=True
)
pivot_table = df.pivot_table(
    "Quantity", ["CustomerID", "Name", "ClosingDate"], "Week", aggfunc="sum"
).fillna(0)
pivot_table = pivot_table.reindex(sorted_weeks, axis=1).reset_index()

print(pivot_table)

打印:

Week CustomerID    Name ClosingDate  Quantity for Week Ending 09/05/2021  Quantity for Week Ending 02/05/2021  Quantity for Week Ending 24/04/2021  Quantity for Week Ending 18/04/2021
0           001     Tom  02/05/2021                                  0.0                                  5.0                                  0.0                                  0.0
1           002  Joseph  09/05/2021                                  6.0                                  0.0                                  0.0                                  0.0
2           003   Krish  18/04/2021                                  0.0                                  0.0                                  0.0                                 19.0
3           004    John  24/04/2021                                  0.0                                  0.0                                  4.0                                  0.0