目标是在每个id下获得3个最高值,并按顺序分配“primary”,“secondary”,“tertiary”。 例如,对于x1,x2,x3(它们是存储组),d_id = 1具有值100,200,300。 因此,对于d_id = 1,x3将是主存储,依此类推。 以下是该过程的代码。
cols = ["d_id", "primary", "secondary","tertiary"]
scoring_results = pd.DataFrame(columns = cols, index = scoreperseg.index)
zz = len(scoreperseg)
d_count = 0
for index, row in scoreperseg.iterrows():
d_count += 1
row_sorted = row.sort_values(ascending=False)
scoring_results.ix[index]['d_id'] = index
scoring_results.ix[index]['primary'] = segment_map[row_sorted[0:3].idxmax()][1][0]
scoring_results.ix[index]['secondary'] = segment_map[row_sorted[1:3].idxmax()][1][0]
scoring_results.ix[index]['tertiary'] = segment_map[row_sorted[2:3].idxmax()][1][0]
Segment_Map Key
['A', 'B', 'C', 'D' s14
['Premiums'] s14
['Movies'] s14
Score_Per_Seg
d_id s2 s41 s47 s14
3 0 0 0 0.002507676
225 0 0 0 0
Scoring_Result
d_id segment segment_genre
3 Premium Movies
@COLDSPEED 这有用吗? 因此,对于上面的示例,我需要对score_per_seg中的每一行进行排序,获取3个最高的段值,然后在段映射中找到这些段的索引,然后将得分结果中的段映射中的值存储为主要值,中学,大专。 我希望这很清楚,可以理解。
有超过500万个d_id,此过程目前需要2个多小时才能完成。 有没有办法优化这些操作。 我试过寻找并行操作,但我认为这不会起作用。 有人可以指导我吗? Segment_Map包含一个家庭在一年内从特定商店购买的平均次数。