gpt4 book ai didi

python - 使用 dict 查找 df 的两列值的模式并基于该模式添加新列

转载 作者:行者123 更新时间:2023-12-04 07:42:44 26 4
gpt4 key购买 nike

我有一个 df:

MSG_TYPE    MSG_TYPE_1
0 MT740 MT747
1 MT747 MT742
2 MT742 MT799
4 MT740 MT742
5 MT742 MT742
我有一个字典为 d:
[{'MSG_TYPE': 'MT740', 'MSG_TYPE_1': 'MT747', 'RELATIONSHIP': 'AMENDMENT_TO_AUTHORISISATION'}, {'MSG_TYPE': 'MT740', 'MSG_TYPE_1': 'MT742', 'RELATIONSHIP': 'REIMBURSEMENT_CLAIM_FOR'}, {'MSG_TYPE': 'MT740', 'MSG_TYPE_1': 'MT799', 'RELATIONSHIP': 'ADDITIONAL_INFORMATION'}, {'MSG_TYPE': 'MT742', 'MSG_TYPE_1': 'MT799', 'RELATIONSHIP': 'ADDITIONAL_INFORMATION'}, {'MSG_TYPE': 'MT742', 'MSG_TYPE_1': 'MT742', 'RELATIONSHIP': 'REIMBURSEMENT_CLAIM_FOR'}, {'MSG_TYPE': 'MT742', 'MSG_TYPE_1': 'MT740', 'RELATIONSHIP': 'REIMBURSEMENT_CLAIM_FOR'}, {'MSG_TYPE': 'MT742', 'MSG_TYPE_1': 'MT747', 'RELATIONSHIP': 'AMENDMENT_TO_AUTHORISISATION'}
我想将 df 的所有 rown 的模式与 dict d 匹配,如果特定行的模式与键值对条目之一相同,并附加一个新列 df['RELATIONSHIP'] 与相同字典中匹配项的条目,如果没有匹配项,则为 NAN。
我已经相应地编写了我的代码:
for item in df.iterrows():
for value in d:
if item[1]==value['MSG_TYPE'] & item[2]==value['MSG_TYPE_1']:
df['RELATIONSHIP']=value['RELATIONSHIP']
这给了我一个错误:
IndexError: tuple index out of range
是否有更好的 Pythonic 方法来执行此操作,因为 dict 键名与 df 列名相同。

最佳答案

试试 merge :

df.merge(pd.DataFrame(d), on=['MSG_TYPE','MSG_TYPE_1'], how='left')
输出:
  MSG_TYPE MSG_TYPE_1                  RELATIONSHIP
0 MT740 MT747 AMENDMENT_TO_AUTHORISISATION
1 MT747 MT742 NaN
2 MT742 MT799 ADDITIONAL_INFORMATION
3 MT740 MT742 REIMBURSEMENT_CLAIM_FOR
4 MT742 MT742 REIMBURSEMENT_CLAIM_FOR

关于python - 使用 dict 查找 df 的两列值的模式并基于该模式添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67373219/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com