Iterate over groups / build a new dataframe from dataframe of groupsΒΆ
R:
dfnrow = function(df) (data.frame(count=nrow(df)))
mtcars %>% group_by(cyl) %>% do(dfnrow(.))
pandas:
def something(grp):
return pd.DataFrame({'count': [len(grp)]})
pd.concat([something(group).assign(cyl=idx) for idx, group in mtcars.groupby('cyl')],axis=0)
pyldata:
mtcars >> dp.group_by('cyl') >> dp.do(something)
No iterator over groups
dpylython:
No do, no group iterator
dfply version 1:
mtcars >> dp.group_by('cyl') >> dfply.dfpipe(something)()
Approach 1: turn something into a verb.
dfply version 2:
@dfply.dfpipe
def do(df, func, *args, **kwargs):
return func(df, *args, **kwargs)
mtcars >> dp.group_by('cyl') >> do(something)
Approach 2: introduce do verb.
dppd:
dp(mtcars).groupby('cyl').do(something).pd
or
for idx, sub_df in dp(mtcars).groupby('cyl').itergroups():
print(idx, something(sub_df))
dppd has a group iterator.