熊猫:有条件的分组

Posted

技术标签:

【中文标题】熊猫:有条件的分组【英文标题】:Pandas: groupby with condition 【发布时间】:2017-01-30 17:51:40 【问题描述】:

我有数据框:

ID,used_at,active_seconds,subdomain,visiting,category
123,2016-02-05 19:39:21,2,yandex.ru,2,Computers
123,2016-02-05 19:43:01,1,mail.yandex.ru,2,Computers
123,2016-02-05 19:43:13,6,mail.yandex.ru,2,Computers
234,2016-02-05 19:46:09,16,avito.ru,2,Automobiles
234,2016-02-05 19:48:36,21,avito.ru,2,Automobiles
345,2016-02-05 19:48:59,58,avito.ru,2,Automobiles
345,2016-02-05 19:51:21,4,avito.ru,2,Automobiles
345,2016-02-05 19:58:55,4,disk.yandex.ru,2,Computers
345,2016-02-05 19:59:21,2,mail.ru,2,Computers
456,2016-02-05 19:59:27,2,mail.ru,2,Computers
456,2016-02-05 20:02:15,18,avito.ru,2,Automobiles
456,2016-02-05 20:04:55,8,avito.ru,2,Automobiles
456,2016-02-05 20:07:21,24,avito.ru,2,Automobiles
567,2016-02-05 20:09:03,58,avito.ru,2,Automobiles
567,2016-02-05 20:10:01,26,avito.ru,2,Automobiles
567,2016-02-05 20:11:51,30,disk.yandex.ru,2,Computers

我需要做的

group = df.groupby(['category']).agg('active_seconds': sum).rename(columns='active_seconds': 'count_sec_target').reset_index()

但我想添加与

相关的条件
df.groupby(['category'])['ID'].count()

如果category 的计数小于5,我想删除这个类别。 不知道怎么写这个条件。

【问题讨论】:

在您的示例数据中,不会删除任何类别,但是您是否在追求类似df.groupby('category').filter(lambda x: len(x) >= 5) 【参考方案1】:

作为EdChum commented,你可以使用filter

您还可以通过sum 简化聚合:

df = df.groupby(['category']).filter(lambda x: len(x) >= 5)

group = df.groupby(['category'], as_index=False)['active_seconds']
          .sum()
          .rename(columns='active_seconds': 'count_sec_target')
print (group)

      category  count_sec_target
0  Automobiles               233
1    Computers                47

reset_index 的另一种解决方案:

df = df.groupby(['category']).filter(lambda x: len(x) >= 5)

group = df.groupby(['category'])['active_seconds'].sum().reset_index(name='count_sec_target')
print (group)
      category  count_sec_target
0  Automobiles               233
1    Computers                47

【讨论】:

以上是关于熊猫:有条件的分组的主要内容,如果未能解决你的问题,请参考以下文章

相邻行熊猫的分组条件总和

大熊猫中分组的条件比率

在使用条件聚合进行分组时选择多个第 n 个值 - 熊猫

熊猫:分组并根据条件在每个组中删除行

在熊猫中按多个条件分组[重复]

熊猫将行值除以聚合总和,条件由其他单元格设置