frac = .3
df.groupby('b').apply(pd.DataFrame.sample, frac=.3)
a b
b
0 6 7 0
1 0 1 1
df.groupby('b', group_keys=False).apply(pd.DataFrame.sample, frac=.3)
a b
6 7 0
2 3 1
其他方法:先shuffle,再groupby,然后head
df.sample(frac=1).groupby('b').head(2)
a b
2 3 1
5 6 0
1 2 1
4 5 0
以上代码等价于df.groupby('b', group_keys=False).apply(pd.DataFrame.sample, n=N)