如何在数据框内的每个组内绘制一个样本(例如,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
非常感谢
答案 0 :(得分:3)
您可以使用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