Вложенное условие «если» в Pandas: сравнить значение в одном столбце со значениями int dict в другом столбце - PullRequest
0 голосов
/ 15 октября 2018

У меня есть DataFrame следующим образом:

Index Name Age NestedDict      
1     Adam  45 {"Dataobject":[{"Adam":26, "id":69},{"Adam":45, "id":63},{"Adam":40, "id":20}]
2     etc

Я хочу: для каждой записи в DF сравнивать значение в столбце Age с каждым значением "Adam" в dict в столбце NestedDict, и если есть совпадение, то заданиеэто значение "id" для нового столбца и в идеале исключить других "Adams" из dict.

Я знаю, что могу получить доступ к dict с помощью «apply»:

DF.NestedDict.apply(lambda x: x.get("Dataobject")

И я попытался получить значения «Adam» из dict следующим образом:

DF.NestedDict.apply(lambda x: [i.get("Adam") for i in x.get("Dataobject")])

, что дает мне

[26, 45, 40]

, но тогда я не знаю, как выполнить условие, если сравнивать каждое значение из списка с DF.Age, и если есть совпадение, то как получить 'id' издиктат

1 Ответ

0 голосов
/ 15 октября 2018

Используйте понимание вложенного списка с помощью zip, а также верните значение первого совпадения на next со строкой по умолчанию no match, если она не существует:

df['new_id'] = [next(iter([i.get("id") for i in x.get("Dataobject") 
                if i.get("Adam") == y]), 'no match')
                for y, x in zip(df['Age'], df['NestedDict'])]

Образец :

d = {"Dataobject":[{"Adam":26, "id":69},{"Adam":45, "id":63},{"Adam":40, "id":20}]}
df = pd.DataFrame({'Age':[45, 40, 38], 'NestedDict':[d, d, d]})

df['new_id'] = [next(iter([i.get("id") for i in x.get("Dataobject") 
                if i.get("Adam") == y]), 'no match')
                for y, x in zip(df['Age'], df['NestedDict'])]

print (df)


   Age                                         NestedDict    new_id
0   45  {'Dataobject': [{'Adam': 26, 'id': 69}, {'Adam...        63
1   40  {'Dataobject': [{'Adam': 26, 'id': 69}, {'Adam...        20
2   38  {'Dataobject': [{'Adam': 26, 'id': 69}, {'Adam...  no match
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...