代码之家  ›  专栏  ›  技术社区  ›  user3476463

返回dict和dataframe记录之间的唯一差异

  •  0
  • user3476463  · 技术社区  · 6 年前

    我有像下面的图像属性数据这样的数据。我想将一个dict值与dataframe中的一个指定记录列表进行比较,并返回一个dict,其中包含原始dict所特有的列和值。

    所以在这个例子中,我将“purch”dict与image_id=[16151561]的记录进行比较。我想让您返回我的代码:

    {('Sleeve', 'Long sleeves')}
    

    现在它返回的列和值对于每个记录都是不同的。有没有人知道如何过滤最终的DICT,只返回唯一的列和值的DICT,(像上面的例子一样?)

    img_attr_df :

       image_id Neckline         Sleeve Skin_exposure
    0       619  V-shape   Long sleeves  Low exposure
    1      1615  V-shape  Short sleeves  Low exposure
    2      1561    Round  Short sleeves  Low exposure
    

    purch :

       image_id Neckline        Sleeve Skin_exposure
    0       619  V-shape  Long sleeves  Low exposure
    

    代码:

    def diff_attributes(df_na,dataset,To_compare):
        compared=[]
    
        for i in To_compare:
            compared.append(set(dataset.loc[:,input_df.columns!='image_id'].to_dict(orient ='records')[0].items())-set(df_na[df_na['image_id']==i].loc[:,input_df.columns!='image_id'].to_dict(orient ='records')[0].items()))
    
        return compared
    
    input_df=img_attr_df[['image_id','Neckline','Sleeve','Skin_exposure']]
    comp_list=[1615,1561]
    
    diff_attributes(input_df,purch,comp_list)
    

    输出:

    [{('Sleeve', 'Long sleeves')},
     {('Neckline', 'V-shape'), ('Sleeve', 'Long sleeves')}]
    

    期望输出:

    {('袖子','长袖')}
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   BENY    6 年前

    我用 isin

    def diff_attributes(df_na,dataset,To_compare):
        compared=[]
        for i in dataset.columns[1:]:
            if ~dataset[i].isin(df_na.loc[df_na['image_id'].isin(To_compare),i]).any():
                compared.append((i,dataset[i][0]))
        return compared
    input_df=df[['image_id','Neckline','Sleeve','Skin_exposure']]
    comp_list=[1615,1561]
    diff_attributes(input_df,purch,comp_list)
    Out[142]: [('Sleeve', 'Longsleeves')]