【问题标题】:Sorting pivot table by the pivot value Python按枢轴值Python对数据透视表进行排序
【发布时间】:2021-05-12 00:26:10
【问题描述】:

我在下面有这个数据框,它希望按周旋转,但在输出中将周值从最新日期排序到最旧日期。

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)

数据透视表如下:-

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

我怎样才能得到如下数据透视表输出,从数据集中的最新日期到最旧日期?

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        

【问题讨论】:

    标签: python pandas pivot-table


    【解决方案1】:

    试试:

    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
    

    【讨论】:

    • 谢谢@Andrej。您的解决方案效果很好。请告诉我sorted(df["Week"], key=lambda k: k.split()[-1].split("/")[::-1], reverse=True)这行的意思?
    • @Herdil k.split()[-1].split("/")[::-1] 将从字符串中获取02/05/2021,然后将此部分拆分为['02', '05', '2021'] 并反转列表(['2021', '05', '02'])。我根据这个键对列名进行排序。
    • 谢谢@Andrej。这很聪明,我非常感谢你的努力。
    • 我有很多记录的问题。试过这个,我最终得到了水平的长值。我猜它会在 x 和 y 方向上列出它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 2019-01-08
    • 2016-06-09
    • 2023-04-06
    • 2020-06-16
    • 2019-11-15
    • 2022-11-14
    相关资源
    最近更新 更多