簡體   English   中英

Pandas中的項目組合和頻率計數

[英]Items combination and frequency count in Pandas

我有這樣的數據集:

訂購代碼 物品編號 項目名 總價
123 id1 姓名1 345
321 id2 名字2 678

和 Function 用於計算哪些物品是一起出售的。 哪些最受歡迎或更貴

出去:

物品編號 一起賣
id1 [ id33, id23, id12 ]
id2 [ id56, id663 ]

我使用這個函數:

def freq(df):
    
    hit_list = [list of ID's]
    
    result = pd.DataFrame(columns = ['ITEM_ID', 'sold together'])
    
    unic_arc  = df['ITEM_ID'].unique()
    unic_num = df['ORDER_CODE'].unique()
    data_arc ={}
    data_num={}
    for i in unic_arc:
        data_arc[i] = {}
        
    tturns = response_ur[['ITEM_ID', 'TOTALPRICE']].groupby(by = 'ITEM_ID', as_index = False).sum()
    tturns = tturns.rename(columns = {'ITEM_ID' : 'inum', 'TOTALPRICE' : 'turn'})
    
    for i in tqdm(unic_arc):
        b = df[df['ITEM_ID'] == i]['ORDER_CODE'].values
        for t in b:
            a = df[df['ORDER_CODE'] == t]['ID'].values
            if i in a:
                for arc in a:
                    if int(arc) not in hit_list: 
                        if arc != i:
                            if arc in data_arc[i]:
                                data_arc[i][arc]+=1
                            else:
                                data_arc[i][arc] = 1
                            
        dd = data_arc[i]
                
        tmp = pd.DataFrame(columns = ['inum', 'freq'])
        tmp['inum'] = data_arc[i].keys()
        tmp['freq'] = data_arc[i].values()
        
        tmp['inum'] = tmp['inum'].astype(str)
        tturns['inum'] = tturns['inum'].astype(str)
            
        tmp = pd.merge(tmp, tturns, on = 'inum', how = 'inner')

        tmp = tmp.sort_values(by = ['freq', 'turn'], ascending = False)
        
        if len(tmp['inum'].values) > 14:
            inums = str(tmp['inum'].values[0:15]).replace("\n", "").replace(' ', ',').replace('\'', '')
        else:
            inums = str(tmp['inum'].values).replace("\n", "").replace(' ', ',').replace('\'', '')
            
        result = res.append({'inum' : i, 'recs' : inums}, ignore_index = True)
                            
    return(result)

我嘗試在任何迭代中在 Func 中添加 merge 1for addint ITEM_NAME,但它太長了。 我的數據集有大約 10kk 行

我需要在我的 output 中再添加一列,其中包含“一起出售”列表項的“ITEM_NAME”列表。 並快速計算?

這可能會做到:

import pandas as pd

df = pd.DataFrame( {
                    'ORDER_CODE':['123','321','123','123','321','555'], 
                    'ITEM_ID':[1,2,5,5,4,6],
                    'ITEM_NAME':['name1','name2','name3','name4','name5','name6'],
                    'TOTALPRICE':[10,20,50,50,40,60]}
                  )

result = df.groupby("ORDER_CODE").agg({"ITEM_ID":list, "ITEM_NAME":list, "TOTALPRICE":"sum"})

更好的答案是如何通過聚合在組中創建列表:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM