从DataFrame中的所有组中绘制样本

时间:2017-03-31 11:46:52

标签: python pandas

如何在数据框内的每个组内绘制一个样本(例如,10%随机或每隔第n行)?

e.g。从按名称'

分组时
A   B
1   a
1   b
2   a
2   c
2   d
3   x

我希望得到类似的内容:

name    a    b
foo     1    1
foo     4    1
foo     3    3
bar     2    1
bar     3    7
bar     4    3
bar     1    2
非常感谢

1 个答案:

答案 0 :(得分:3)

您可以使用groupbyname列进行分组,然后应用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