以下是一个示例代码,用于按组随机抽取行样本,直到达到最大行数:
import pandas as pd
import random
def random_sample_groups(data, group_column, max_rows):
grouped_data = data.groupby(group_column)
sampled_data = pd.DataFrame(columns=data.columns)
for group, group_data in grouped_data:
num_rows = group_data.shape[0]
if num_rows <= max_rows:
sampled_data = sampled_data.append(group_data)
else:
sampled_rows = random.sample(range(num_rows), max_rows)
sampled_group_data = group_data.iloc[sampled_rows]
sampled_data = sampled_data.append(sampled_group_data)
return sampled_data
# 示例用法
# 创建一个示例数据框
data = pd.DataFrame({
'Group': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'],
'Value': [1, 2, 3, 4, 5, 6, 7, 8]
})
# 按照 'Group' 列进行分组抽取,每组最多抽取2行样本
sampled_data = random_sample_groups(data, 'Group', 2)
print(sampled_data)
输出结果可能为:
Group Value
0 A 1
1 A 2
3 B 4
4 B 5
5 C 6
7 C 8
在这个示例中,我们首先根据 'Group' 列对数据进行分组,然后对每个组进行抽样。如果组的行数小于等于最大行数,则将整个组的数据加入到抽样数据框中。否则,我们使用 random.sample()
函数从组中随机选择最大行数的样本,并将这些样本添加到抽样数据框中。最后,返回抽样数据框作为结果。
上一篇:按组搜索和替换R