I know this must have been answered some where but I just could not find it.
Problem: Sample each group after groupby operation.
This works like magic:
# np.random.seed(0)
df.groupby('b').sample(frac=.3)
a b
5 6 0
0 1 1
You can use GroupBy.apply with sample. You do not need to use a lambda; apply accepts keyword arguments:
df.groupby('b', group_keys=False).apply(pd.DataFrame.sample, frac=.3)
a b
5 6 0
0 1 1