Python分组依据>来自每个组的示例

2024-09-30 14:28:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

allthedata.groupby("groupvariable", group_keys=False).apply(lambda group_df: group_df.sample(100, random_state=784)) 

根据上面的代码,我每组抽取100例样本。然而,我想从第一组中抽取10个样本,从第二组中抽取40个样本,从第三组中抽取10个样本,等等。这与整个组的规模无关

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

谢谢


Tags: 数据samplelambdafalsedfgroup身份数字
2条回答

在这种情况下,需要一个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)

相关问题 更多 >