I would like to replace the following syntax with a cleaner, chained syntax - perhaps using .pipe
(similar to dplyr
library in R):
Sample dataset:
dt = pd.DataFrame({
"PACK_STR": ['112', '112', '112', '134', '145', '134'],
"FLAG_MODE_SUM_PCK": [1, 0, 1, 1, 1, 0]
})
Code to replace by piping:
packs_mode_sum_pck = dt.groupby(['PACK_STR']).FLAG_MODE_SUM_PCK.sum().reset_index().rename(columns={'FLAG_MODE_SUM_PCK':'OCCUR_MODE_SUM_PCK'})
dt = dt.merge(packs_mode_sum_pck, how="left", on='PACK_STR')
Expected output:
PACK_STR FLAG_MODE_SUM_PCK OCCUR_MODE_SUM_PCK
0 112 1 2
1 112 0 2
2 112 1 2
3 134 1 1
4 145 1 1
5 134 0 1
CodePudding user response:
Here are two elegant ways to get your output:
def ssum(grp):
grp['OCCUR_MODE_SUM_PCK'] = grp['FLAG_MODE_SUM_PCK'].sum()
return grp
dt.groupby('PACK_STR').apply(ssum)
or
dt['OCCUR_MODE_SUM_PCK'] = dt.groupby('PACK_STR')['FLAG_MODE_SUM_PCK'].transform(sum)
dt