优化python-di

2024-03-29 12:42:13 发布

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

目标是获得每个id下的3个最高值,并按顺序指定“primary”、“secondary”、“treative”。 例如,对于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

@冷速 这有用吗? 因此,对于上面的例子,我需要对score_per_seg中的每一行进行排序,得到段的3个最高值,然后在段映射中找到这些段的索引,然后将这些索引中的值存储在评分结果中的段映射中,分别为primary、secondary和treative。 我希望这是足够清楚的理解。你知道吗

目前有超过500万个d\ U id,此过程需要2个多小时才能完成。 有没有办法优化这些操作。 我试过寻找并行操作,但我想在这里是行不通的。 有人能指导我吗? 段地图包含了一个家庭在一年中平均从一个特定商店购物的次数。你知道吗


Tags: idmapindexsegmentresultsrowixsorted