Python 从数据帧中的所有组中抽取样本

Python 从数据帧中的所有组中抽取样本,python,pandas,Python,Pandas,如何从一个数据帧内的每个组中抽取一个样本行(比如,随机抽取10%,或者每N行抽取一个样本行) e、 g.从按“名称”分组时开始: name a b foo 1 1 foo 4 1 foo 3 3 bar 2 1 bar 3 7 bar 4 3 bar 1 2 我想得到这样的东西: name a b foo 4 1 bar 3 7 bar

如何从一个数据帧内的每个组中抽取一个样本行(比如,随机抽取10%,或者每N行抽取一个样本行)

e、 g.从按“名称”分组时开始:

name    a    b
foo     1    1
foo     4    1
foo     3    3
bar     2    1
bar     3    7
bar     4    3
bar     1    2
我想得到这样的东西:

name    a    b
foo     4    1
bar     3    7
bar     1    2

非常感谢

您可以使用
groupby
按您的
name
列进行分组,然后应用
sample
从子组中随机获取样本

首先,让我们看看虚拟数据:

print(df)

    name    a   b
0   foo     1   1
1   foo     4   1
2   foo     3   3
3   bar     2   1
4   bar     3   7
5   bar     4   3
6   bar     1   2
fraction
定义随机样本的百分比。对于小型虚拟数据集,此处将其设置为0.5:

fraction = 0.5
result = df.groupby("name", group_keys=False).apply(lambda x: x.sample(frac=fraction))

print(result)

    name    a   b
3   bar     2   1
6   bar     1   2
0   foo     1   1
2   foo     3   3