Pandas中嵌套的“if”条件:将一列中的值与另一列中的int dict值进行比较

2024-09-28 15:31:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的数据帧:

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

我想: 对于DF中的每个记录,将Age列中的值与NestedDict列中dict中的每个“Adam”值进行比较,如果匹配,则将其“id”值分配给新列,理想情况下从dict中删除其他“Adams”

我知道我可以用“apply”访问dict:

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

我试着从格言中得到“亚当”的值,就像这样:

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

这让我

[26, 45, 40]

但是,我不知道如何设置if条件来比较列表中的每个值数据框年龄如果有匹配的话,那么如何从dict中得到id


Tags: 数据lambdanameiddfagegetindex
1条回答
网友
1楼 · 发布于 2024-09-28 15:31:39

将嵌套列表理解与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

相关问题 更多 >