pandas列与字典匹配另一列与那些字典值

时间:2018-02-25 01:49:07

标签: python pandas dataframe

我有一个数据帧df为:

invoice_id|customer_id|items|batch

110|425|{'a': 50, 'b': 46}|no518

994528|a863|{'a': 21, 'c': 25}|as22

24|t311|{'scissor': 6, 'rock': 6}|af10

和另一个数据帧df1:

invoice_id|defect

110|a

994528|c

我想在df ['items']列中搜索df1 ['defect']中的值。 这是我的预期输出:

invoice_id|customer_id|items|batch|defects_in_items

110|425|{'a': 50, 'b': 46}|no518|50

994528|a863|{'a': 21, 'c': 25}|as22|25

24|t311|{'scissor': 6, 'rock': 6}|af10|0

任何人都可以提供帮助。提前致谢

2 个答案:

答案 0 :(得分:1)

另一种方式:

Center

答案 1 :(得分:1)

合并两个数据帧,然后使用apply。

import ast
df2 = df.merge(df1, on=["invoice_id"], how="left")
df2["defects_in_items"] = df2.apply(lambda x: ast.literal_eval(x["items"]).get(x["defect"],0), axis=1)
df2.iloc[:,[0,1,2,3,5]]

结果:

    invoice_id  customer_id items                      batch    defects_in_items
0   110         425         {'a': 50, 'b': 46}         no518    50
1   994528      a863        {'a': 21, 'c': 25}         as22     25
2   24          t311        {'scissor': 6, 'rock': 6}  af10     0

PS。我使用txt文件来获取两个数据帧,因此我的' items' column的类型是str,ast.literal_eval是将列的类型更改为dict。