【问题标题】:Pivot a Two Column DataFrame With No Numeric Column To Aggregate On透视一个没有数字列的两列数据框进行聚合
【发布时间】:2021-07-24 04:53:11
【问题描述】:

我有一个输入如下的数据框:

df1 = pd.DataFrame(
     {'StoreId':
           [244, 391, 246, 246, 130, 130] , 'PackageStatus': ['IN TRANSIT','IN TRANSIT','IN TRANSIT', 'IN TRANSIT','IN TRANSIT','COLLECTED',]}   
    )

        StoreId     PackageStatus
0           244        IN TRANSIT
1           391        IN TRANSIT
2           246        IN TRANSIT
3           246        IN TRANSIT
4           130        IN TRANSIT
5           130        COLLECTED

我期望的输出看起来像这样,包状态旋转到列并且它们的计数变成值:

StoreId     IN TRANSIT       COLLECTED
244         1                0
391         1                0
246         2                0 
130         1                1 

我遇到的所有示例都带有第三个数字列,其中完成了一些聚合(总和、平均值、平均值等)。

当我尝试时

 df1.pivot_table(index='StoreId',values='PackageStatus', aggfunc='count')

我得到以下信息:

              PackageStatus
StoreId               
130                       2
244                       1
246                       2
391                       1

在我的情况下,我需要一个简单的转置/旋转计数。如何做到这一点?谢谢。

【问题讨论】:

    标签: python-3.x pandas dataframe pivot-table


    【解决方案1】:

    使用columns="PackageStatus"参数:

    print(
        df1.pivot_table(
            index="StoreId", columns="PackageStatus", aggfunc="size", fill_value=0
        )
    )
    

    打印:

    PackageStatus  COLLECTED  IN TRANSIT
    StoreId                             
    130                    1           1
    244                    0           1
    246                    0           2
    391                    0           1
    

    .reset_index():

    print(
        df1.pivot_table(
            index="StoreId", columns="PackageStatus", aggfunc="size", fill_value=0
        )
        .reset_index()
        .rename_axis("", axis=1)
    )
    

    打印:

       StoreId  COLLECTED  IN TRANSIT
    0      130          1           1
    1      244          0           1
    2      246          0           2
    3      391          0           1
    

    【讨论】:

    • .reset_index() 的解决方案正是我想要的。感谢您的极快响应。难以置信的快。
    • 您能否帮助理解rename_axis() 在此示例中的作用?
    • @FMFF 如果没有.rename_axis(),您将在索引上显示文本“PackageStatus”。使用.rename_axis("", axis=1) 我只是清除它(如果你愿意,你可以省略这一步)。
    • 不,这正是我想要的。我会保留它。再次感谢您。
    猜你喜欢
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    相关资源
    最近更新 更多