【发布时间】:2021-05-03 17:27:37
【问题描述】:
我有一个 df:
MSG_TYPE MSG_TYPE_1
0 MT740 MT747
1 MT747 MT742
2 MT742 MT799
4 MT740 MT742
5 MT742 MT742
我有一个 dict 作为 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'] dict 中匹配的相同条目,如果没有匹配,则为 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 列名相同。
【问题讨论】:
-
我们使用
0索引,所以应该是item[0]和item[1]。这就是为什么您会收到index out of range错误 (2) 将是长度为 2 元组中的第三项。
标签: python pandas dataframe dictionary