groupby操作后如何对每组进行采样?
import pandas as pd
df = pd.DataFrame({'a': [1,2,3,4,5,6,7],
'b': [1,1,1,0,0,0,0]})
grouped = df.groupby('b')
鉴于上述设置,我想从每组中进行采样,例如,我想要每组的 30%。
GroupBy.sample
这就像魔术一样:
# np.random.seed(0)
df.groupby('b').sample(frac=.3)
a b
5 6 0
0 1 1
GroupBy.apply
与 sample
一起使用。您不需要使用 lambda; apply
接受关键字参数:
df.groupby('b', group_keys=False).apply(pd.DataFrame.sample, frac=.3)
a b
5 6 0
0 1 1