我有一个数据帧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
任何人都可以提供帮助。提前致谢
答案 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。