首页 > 解决方案 > 透视一个没有数字列的两列数据框进行聚合

问题描述

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

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.xpandasdataframepivot-table

解决方案


使用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

推荐阅读