【问题标题】:How do you remove first row of each groupby aggregate dataframe?如何删除每个 groupby 聚合数据框的第一行?
【发布时间】:2020-12-22 05:02:15
【问题描述】:

我目前有这个功能:

def process_data(data):
    data = data[data['Bucket Number'] == 25.0].groupby(['Activity Month', 'Agent Sign']).agg({'Total Ping Current Forecast': [np.sum]})
    data = data.sort_values(['Activity Month', ('Total Ping Current Forecast', 'sum')], ascending=[True, False]).groupby(level=0).head(3)
    return data

产生这个输出:

                          Total Ping Current Forecast
                                                  sum
Activity Month Agent Sign                            
202001         {Various}                 1.305513e+09
               HDQGR1                    2.171435e+08
               CRCTLD                    4.774614e+07
202002         {Various}                 1.159181e+09
               HDQGR1                    1.912536e+08
               CRCTLD                    4.573402e+07
202003         {Various}                 1.090292e+09
               HDQGR1                    1.852591e+08
               CRCTLD                    4.045673e+07

我想删除每个组的第一行,以便输出如下所示:

                          Total Ping Current Forecast
                                                  sum
Activity Month Agent Sign                            
202001         HDQGR1                    2.171435e+08
               CRCTLD                    4.774614e+07
               DFW1DF                    1.622023e+07
202002         HDQGR1                    1.912536e+08
               CRCTLD                    4.573402e+07
               HDQ1ZB                    2.711470e+07
202003         HDQGR1                    1.852591e+08
               CRCTLD                    4.045673e+07
               HDQ1ZB                    1.532134e+07

基本上,我希望删除每个组的最高值,因为数据帧已经按sum 降序排序。

我找到了this solution 并尝试了这个:

def process_data(data):
    data = data[data['Bucket Number'] == 25.0].groupby(['Activity Month', 'Agent Sign']).agg({'Total Ping Current Forecast': [np.sum]})
    data = data.sort_values(['Activity Month', ('Total Ping Current Forecast', 'sum')], ascending=[True, False]).apply(lambda x: x.iloc[1:]).groupby(level=0).head(3)
    return data

但它只将该函数应用于给出此结果的第一组:

                          Total Ping Current Forecast
                                                  sum
Activity Month Agent Sign                            
202001         HDQGR1                    2.171435e+08
               CRCTLD                    4.774614e+07
               DFW1DF                    1.622023e+07
202002         {Various}                 1.159181e+09
               HDQGR1                    1.912536e+08
               CRCTLD                    4.573402e+07
202003         {Various}                 1.090292e+09
               HDQGR1                    1.852591e+08
               CRCTLD                    4.045673e+07

如何将该函数应用于数据框中的每个组?

【问题讨论】:

标签: python pandas dataframe pandas-groupby


【解决方案1】:

在您的代码中,您可以使用.nth([1, 2]),而不是使用.head(3)

这将返回每个组的第二个和第三个元素,因为 nth 的索引是从零开始的。

阅读更多the docs

【讨论】:

    猜你喜欢
    • 2019-12-20
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多