Skip to content Skip to sidebar Skip to footer

Applying A Function To A Subset Of Columns In Pandas Groupby

I have a df with many columns. I would like to group by id and transform a subset of those columns leaving the rest untouched. What is the optimal way to do this? In particular, I

Solution 1:

One possible solution is filter columns names first by difference, because dict cannot working with transfrom yet:

cols = df.columns.difference(['c'])
print (cols)
Index(['a', 'b'], dtype='object')

fmap = lambda x: (x - x.mean()) / x.std()
df[cols] = df.groupby("id")[cols].transform(fmap) 
print (df)
           a         b  c
id                       
3  -1.000000  1.000000  2
2  -1.091089  1.091089  2
1  -1.134975  1.134975  6
3   0.000000  0.000000  1
1  -0.529655  0.529655  3
2   0.218218 -0.218218  9
3   1.000000 -1.000000  6
2   0.872872 -0.872872  1
1   0.680985 -0.680985  0
1   0.983645 -0.983645  1

Post a Comment for "Applying A Function To A Subset Of Columns In Pandas Groupby"