首页 > 解决方案 > 如何在熊猫中分组后压缩行

问题描述

我在我的数据框上执行了 groupby。

grouped = data_df.groupby(['Cluster','Visit Number Final'])['Visitor_ID'].count() 

我得到以下输出:

data_df.groupby(['Cluster','Visit Number Final'])['Visitor_ID'].count()

出[81]:

    Cluster  Visit Number Final
    0        1                     21846
             2                      1485
             3                       299
             4                        95
             5                        24
             6                         8
             7                         3
    1        1                     33600
             2                      2283
             3                       404
             4                       117
             5                        34
             6                         7
    2        1                      5858
             2                       311
             3                        55
             4                        14
             5                         6
             6                         3
             7                         1
    3        1                     19699
             2                      1101
             3                       214
             4                        78
             5                        14
             6                         8
             7                         3
    4        1                     10086
             2                       344
             3                        59
             4                        14
             5                         3
             6                         1
    Name: Visitor_ID, dtype: int64                               

现在我想压缩访问次数最终> 3的行(添加一个新行,其中包含最终访问次数 4、5、6 的总和)。我正在尝试 groupby.filter 但没有得到预期的输出。我的最终输出应该看起来像

Cluster  Visit Number Final 

    0        1                     21846 
             2                      1485 
             3                       299 
           >=4                       130 

    1        1                     33600 
             2                      2283 
             3                       404 
           >=4                       158 

    2        1                      5858 
             2                       311 
             3                        55 
           >=4                        24 

    3        1                     19699 
             2                      1101 
             3                       214 
           >=4                       103 

    4        1                     10086 
             2                       344 
             3                        59 
           >=4                        18

标签: pythonpandas

解决方案


最简单的方法是在对数据框进行分组之前替换大于 3 的“最终访问次数”值:

df.loc[df['Visit Number Final'] > 3, 'Visit Number Final'] = '>=4'
df.groupby(['Cluster','Visit Number Final'])['Visitor_ID'].count()

推荐阅读