Вернуть уникальную разницу между записями dict и dataframe - PullRequest
0 голосов
/ 11 июня 2018

У меня есть такие данные, как image_attr_df данные ниже.Я хочу сравнить элемент значений с указанным списком записей из кадра данных и вернуть элемент с столбцом и значением, уникальным для исходного элемента.

Так что в этом примере я сравниваю "покупки""диктовать записи с image_id = [1615, 1561].Я хотел бы, чтобы мой код возвращался:

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

Прямо сейчас он возвращает столбцы и значения, которые отличаются для каждой записи.Кто-нибудь знает, как я могу отфильтровать этот окончательный диктат, чтобы он просто возвращал диктат только с уникальными столбцами и значениями (как в моем примере выше?)

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')}]

Желаемый выход:

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

1 Ответ

0 голосов
/ 11 июня 2018

Я немного изменил вашу функцию, используя 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')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...