Anupam Ghosh
Anupam Ghosh

Reputation: 334

Pandas filter after aggregation

Is is possible to filter the data after groupby aggregation ?

I have aggregated the sum after applying groupby function, and want to see the rows where the sum is between some values.

Here is a basic code

A = pd.DataFrame([
    [1, 2], 
    [2, 3], 
    [1, 6], 
    [2, 7], 
    [3, 5],
    [2, 9],
    [4, 7], 
    [3, 5],
    [3, 9],
    [3, 4]
], columns=['id', 'val'])

display(A)
display(A.groupby(['id']).agg({'val': ['sum', 'count']}))

I want count of val between 1 and 4 after aggregation

Upvotes: 1

Views: 4934

Answers (1)

Manrique
Manrique

Reputation: 2221

I dint understand if you wanted the sum between 1 and 4 or the count. So here is how i made it for the two options:

import pandas as pd
A = pd.DataFrame([
    [1, 2], 
    [2, 3], 
    [1, 6], 
    [2, 7], 
    [3, 5],
    [2, 9],
    [4, 7], 
    [3, 5],
    [3, 9],
    [3, 4],
    [1,2],
    [1,2],
    [1,2],
    [1,2],
    [1,2],
], columns=['id', 'val'])

s = A.groupby(['id']).agg({'val': ['sum', 'count']})
# If you want the count
s[(s['val']['count']<=4) & (s['val']['count']>=1)]
# If you want the sum
s[(s['val']['sum']<=4) & (s['sum']['count']>=1)]

Upvotes: 2

Related Questions