python - Pandas set value in groupby -
i have dataframe...
>>> df = pd.dataframe({ ... 'letters' : ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'], ... 'is_min' : np.zeros(9), ... 'numbers' : np.random.randn(9) ... }) is_min letters numbers 0 0 0.322499 1 0 -0.196617 2 0 -1.194251 3 0 b 1.005323 4 0 b -0.186364 5 0 b -1.886273 6 0 c 0.014960 7 0 c -0.832713 8 0 c 0.689531 i set 'is_min' col 1 if 'numbers' minimum value column 'letters'. have tried , feel close...
>>> df.groupby('letters')['numbers'].transform('idxmin') 0 2 1 2 2 2 3 5 4 5 5 5 6 7 7 7 8 7 dtype: int64 i having hard time connecting dots set val of 'is_min' 1.
pass row labels loc , set column:
in [34]: df.loc[df.groupby('letters')['numbers'].transform('idxmin'), 'is_min']=1 df out[34]: is_min letters numbers 0 1 -0.374751 1 0 1.663334 2 0 -0.123599 3 1 b -2.156204 4 0 b 0.201493 5 0 b 1.639512 6 0 c -0.447271 7 0 c 0.017204 8 1 c -1.261621 so what's happening here calling loc select rows returned transform method , these set 1 desired.
not sure if matters call unique row labels without repetition may faster:
df.loc[df.groupby('letters')['numbers'].transform('idxmin').unique(), 'is_min']=1
Comments
Post a Comment