Pandas: groupby with condition
<p>I have dataframe:</p>

<pre><code>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
</code></pre>

<p>I need to do </p>

<pre><code>group = df.groupby(['category']).agg({'active_seconds': sum}).rename(columns={'active_seconds': 'count_sec_target'}).reset_index()
</code></pre>

<p>but I want to add there condition connected with </p>

<pre><code>df.groupby(['category'])['ID'].count()
</code></pre>

<p>and if count for <code>category</code> less than <code>5</code>, I want to drop this category.
I don't know, how can I write this condition there.</p>

<p>As <a href="http://stackoverflow.com/questions/39634175/pandas-groupby-with-condition/39634269#comment66572870_39634175">EdChum commented</a>, you can use <a href="http://pandas.pydata.org/pandas-docs/stable/groupby.html#filtration" rel="nofollow"><code>filter</code></a>:</p>

<p>Also you can simplify aggregation by <code>sum</code>:</p>

<pre><code>df = df.groupby(['category']).filter(lambda x: len(x) &gt;= 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
</code></pre>

<p>Another solution with <a href="http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reset_index.html" rel="nofollow"><code>reset_index</code></a>:</p>

<pre><code>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
</code></pre>

python pandas filter group-by condition