您可以找到一个小组的最大人数
max_size = frame['class'].value_counts().max()
在您的示例中,该值等于8。对于每个组,您都可以使用替换max_size - len(group_size)
元素进行采样。这样,如果将它们连接到原始DataFrame,它们的大小将相同,并且将保留原始行。
lst = [frame]
for class_index, group in frame.groupby('class'):
lst.append(group.sample(max_size-len(group), replace=True))
frame_new = pd.concat(lst)
您可以使用它max_size-len(group)
,也可以添加一些噪音,因为这会使所有组的大小相等。