Python 嵌套的;如果;熊猫中的条件:将一列中的值与另一列中的int dict值进行比较

Python 嵌套的;如果;熊猫中的条件:将一列中的值与另一列中的int dict值进行比较,python,pandas,dictionary,Python,Pandas,Dictionary,我有这样的数据帧: Index Name Age NestedDict 1 Adam 45 {"Dataobject":[{"Adam":26, "id":69},{"Adam":45, "id":63},{"Adam":40, "id":20}] 2 etc 我想: 对于DF中的每个记录,将年龄列中的值与嵌套dict列中dict中的每个“Adam”值进行比较,如果存在匹配项,则将其“id”值分配给新列,理想情况下从dict中删除其他“Adam” 我知道我可以通过

我有这样的数据帧:

Index Name Age NestedDict      
1     Adam  45 {"Dataobject":[{"Adam":26, "id":69},{"Adam":45, "id":63},{"Adam":40, "id":20}]
2     etc
我想: 对于DF中的每个记录,将年龄列中的值与嵌套dict列中dict中的每个“Adam”值进行比较,如果存在匹配项,则将其“id”值分配给新列,理想情况下从dict中删除其他“Adam”

我知道我可以通过“应用”访问dict:

我试着从格言中得到“亚当”值,如下所示:

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

[26, 45, 40]

但是,我不知道如何设置if条件来将列表中的每个值与DF.Age进行比较,如果存在匹配项,那么如何从dict中获取“id”。

使用嵌套列表理解和
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

是否在一行中始终存在该年龄值的匹配记录?每个记录在列中都有年龄值,但字典中可能没有匹配/对应的值(如果没有匹配,最好将“不匹配”值指定给DF)
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