对数据框进行分组并在组之间以相等概率抽样n行
我有一个这样的 pandas 数据框:
ID Value
0 a 2
1 a 4
2 b 6
3 c 8
4 c 10
5 c 12
我想从 ID
组中进行均匀抽样。我知道可以通过 ID 对数据框进行分组,然后指定想从每个组中抽取的行数,像这样:
df.groupby("ID").sample(n=2, replace = True)
。但是,我只是希望从每个组抽样的概率相同,并不一定要每个组抽取的行数完全一样。
2 个回答
0
你可以用frac来代替你示例代码中的n。这样可以让你对某个ID使用50%的样本:
newdf=df.groupby("ID").sample(frac=0.5, replace = True)
display(newdf)
1
如果你想从每个组中大致以相同的概率抽取N
行数据,你可以先对每个组进行过采样,然后再进行抽样:
import math
N = 4
out = (df.groupby('ID').sample(n=math.ceil(N/df['ID'].nunique()), replace=True)
.sample(N)
)
示例输出:
ID Value
2 b 6
2 b 6
4 c 10
1 a 4
当N = 10
时:
ID Value
0 a 2
2 b 6
5 c 12
3 c 8
1 a 4
5 c 12
2 b 6
1 a 4
1 a 4
2 b 6
当N = 100
时的比例:
ID
b 0.34
a 0.33
c 0.33
Name: proportion, dtype: float64