Python-groupby>sample from every Group

Python-groupby>sample from every Group,python,pandas-groupby,Python,Pandas Groupby,我有一个超过40000行的数据框,其中某一列表示组成员身份。共有八组。 我希望有一个更小的数据帧,在这里我从每个组中抽取一个x数字 allthedata.groupby("groupvariable", group_keys=False).apply(lambda group_df: group_df.sample(100, random_state=784)) 根据上面的代码,我每组抽取100例样本。然而,我想从第一组中抽取10个样本,从第二组中抽取40个样本,从第三组中抽取10个样本,等

我有一个超过40000行的数据框,其中某一列表示组成员身份。共有八组。 我希望有一个更小的数据帧,在这里我从每个组中抽取一个x数字

allthedata.groupby("groupvariable", group_keys=False).apply(lambda group_df: group_df.sample(100, random_state=784)) 
根据上面的代码,我每组抽取100例样本。然而,我想从第一组中抽取10个样本,从第二组中抽取40个样本,从第三组中抽取10个样本,等等。这与整个组的规模无关

有什么方法可以指定每个组的采样量吗


谢谢

在这种情况下,需要一个for循环:

groups = ["groupvariable", "groupvariable2", "groupvariable3" ...]
sample_sizes = [100, 40, 10, ...]

# initialise list of dataframes samples to concatenate     
samples = []

for group, sample_size in zip(groups, sample_sizes):

       samples.append(allthedata.groupby(group, group_keys=False).sample(sample_size, random_state=784)) 

# concatenate all samples into unique data frame 
final_df = pd.concat(samples)

多亏了Edoardo Guerriero和一些小改动,我解决了这个问题:

groups = [1,2,3,4,5,6,7,8]

sample_sizes = [1, 30, 70, 1, 5, 40, 20, 70]

samples = []

for group, sample_size in zip(groups, sample_sizes):

        samples.append(allthedata.groupby("groupingvar").get_group(group).sample(sample_size, random_state=4465))

# concatenate all samples into unique data frame 

finaldf = pd.concat(samples)

但实际上我只有一个分组变量。然后我还是想不出来我犯了个错误;DataFrameGroupby没有属性sample。所以我就这样做了,;对于组,zipgroups中的样本大小,样本大小:samples.appendallthedata.groupbygroup,group\u keys=False.applylambda group\u df:group\u df.samplesample\u size,random\u state=784很高兴您能够修复它。对不起,我刚才写了一些代码,告诉你正确的方向。下一次考虑在你的问题中放一个你的数据框架的例子,这样人们就更容易正确回答。