我正在尝试根据具有目标样本量的列的值将熊猫数据框分为不同的组。下面的数据框示例:
Rating Result
1 25
2 24
5 20
5 21
6 18
7 20
假设我想将上述数据框划分为不同的类别,以便每个组包含2行值,并将根据Rating的值对其进行分隔。
因此,前2行的评分为2低,这会使它们成为自己的组。 5和5等级在第二组中,而6和7等级在第三组和最后一组中。
这将使我能够查找不同等级的评分的平均结果。
我当前尝试解决此任务atm的方式是通过原始循环,在该循环中,我已经硬编码了一些初始值,然后以设定的数量扩展参数范围,直到达到所需的样本量为止。下面的示例:
df = pd.DataFrame(columns=['Rating','Result'],data=[[1,25], [2,24], [5,20], [5,21], [6,18], [7,20]])
initial_rating_threshold = [2,4,6]
targetted_sample_size = 2
paramter_change = 1
for loop_number,original_threshold in enumerate(initial_rating_threshold):
min_threshold = original_threshold-paramter_change*loop_number-2
max_threshold = original_threshold + paramter_change * loop_number
count = len(df.loc[(df['Rating'] >= min_threshold) & (df['Rating'] < max_threshold )])
if count >=targetted_sample_size:
break
# This filter provides the dataframe with minimum desired sample size
上面的代码还可以完成工作,但是我简化了一点,并同时调整了最小参数值和最大参数值。
有没有以更有效的方式执行上述代码?理想情况下,它还可以处理多于1的列,并且无需任何硬编码。