按组随机抽样:如何指定 n,而不是权重? (使用 DataFrameGroupBy.sample)
Random sample by group: how to specify n, not weight? (using DataFrameGroupBy.sample)
这个问题在 之后(其他贡献者要求我 post 作为一个新问题)。
我们有这个模拟 df:
df = pd.DataFrame({
'id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'country': ['USA', 'USA', 'USA', 'USA', 'USA', 'Canada', 'Canada', 'Canada', 'USA', 'Canada']
})
假设我想从美国抽取 4 个随机行,从加拿大抽取 2 个随机行。我试过:
df.groupby("country").sample(n=[4, 2])
这returns一个错误。错误可能是使用了方括号。那么如何给每个组指定不同的n呢?
请注意,理想情况下我需要一个使用 df.groupby.sample 的解决方案。另请注意,我需要指定 n,而不是文档中的比例或权重(请参阅 here)。最后注意我还需要设置一个种子。谢谢
您可以 group
country
上的数据帧,然后 .sample
each group separately where the number of samples to take can be obtained from the dictionary, finally .concat
所有采样组:
d = {'USA': 4, 'Canada': 2} # mapping dict
pd.concat([g.sample(d[k]) for k, g in df.groupby('country', sort=False)])
id country
0 1 USA
4 5 USA
1 2 USA
2 3 USA
6 7 Canada
9 10 Canada
这个问题在
我们有这个模拟 df:
df = pd.DataFrame({
'id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'country': ['USA', 'USA', 'USA', 'USA', 'USA', 'Canada', 'Canada', 'Canada', 'USA', 'Canada']
})
假设我想从美国抽取 4 个随机行,从加拿大抽取 2 个随机行。我试过:
df.groupby("country").sample(n=[4, 2])
这returns一个错误。错误可能是使用了方括号。那么如何给每个组指定不同的n呢?
请注意,理想情况下我需要一个使用 df.groupby.sample 的解决方案。另请注意,我需要指定 n,而不是文档中的比例或权重(请参阅 here)。最后注意我还需要设置一个种子。谢谢
您可以 group
country
上的数据帧,然后 .sample
each group separately where the number of samples to take can be obtained from the dictionary, finally .concat
所有采样组:
d = {'USA': 4, 'Canada': 2} # mapping dict
pd.concat([g.sample(d[k]) for k, g in df.groupby('country', sort=False)])
id country
0 1 USA
4 5 USA
1 2 USA
2 3 USA
6 7 Canada
9 10 Canada