Liza
Liza

Reputation: 971

Finding min with groupby in pandas data frame

I have a following sample df:

   idd   x     y
0  1     2     3
1  1     3     4
2  1     5     6
3  2     7     10 
4  2     9     8
5  3     11    12
6  3     13    14
7  3     15    16
8  3     17    18

I want to use groupby by "idd" and find min of x and y and store it in a new df along with "idd". In the above df, I expect to have xmin for idd=1 as 2, ymin for idd=1 as 3; idd = 2, xmin should be 7, ymin should be 8, and so on.

Expecting df:

   idd   xmin   ymin
0  1     2      3
1  2     7      8
2  3     11     12

Code tried:

for group in df.groupby("idd"):
    box = [df['x'].max(), df['y'].max()]

but it finds the min of x and y of the whole column and not as per "idd".

Upvotes: 0

Views: 3446

Answers (2)

Vaishali
Vaishali

Reputation: 38415

Here's a slightly different approach without rename

df = df.groupby('idd').min().add_suffix('min').reset_index()

    idd xmin    ymin
0   1   2       3
1   2   7       8
2   3   11      12

Upvotes: 2

Allen Qin
Allen Qin

Reputation: 19947

You can use groupby and then take min for each group.

df.groupby('idd').min().reset_index().rename(columns={'x':'xmin','y':'ymin'})

Out[105]: 
   idd  xmin  ymin
0    1     2     3
1    2     7     8
2    3    11    12

Upvotes: 1

Related Questions