我正在理解与 pandas 相关的 lambda 函数。 我正在尝试根据某个单词是否出现在 (A) 列(“上诉”、“审核”、“评估”)中创建一个新列
但是我收到以下错误:
属性错误:“str”对象没有属性“str”
d = {"A":["Assessment Division","Division of Appeals","Calgary Audit","Halifax Market","Georgian Markers"],
"B":[100,300,400,500,400]
sample = pd.DataFrame(d)
sample["results"] = sample["A"].apply(lambda x: "Invoice" if x.str.contains("Audit") or x.str.contains("Appeals") or x.str.contains("Assessment") else "NoAction")
我也尝试过这样做来尝试缩短我的代码,但收到相同的错误:
d = {"A":["Assessment Division","Division of Appeals","Calgary Audit","Halifax Market","Georgian Markers"],
"B":[100,300,400,500,400]
sample = pd.DataFrame(d)
reqs = ["Audit","Appeals","Assessment"]
sample["results"] = sample["A"].apply(lambda x: "Invoice" if x.str.contains().isin(reqs) else "NoAction")
最佳答案
您可以使用 any()
检查字符串是否包含 reqs
中的任何单词:
reqs = ["Audit","Appeals","Assessment"]
mask = sample['A'].apply(lambda x: any(r in x for r in reqs))
sample['results'] = np.where(mask, 'Invoice', 'NoAction')
print(sample)
打印:
A B results
0 Assessment Division 100 Invoice
1 Division of Appeals 300 Invoice
2 Calgary Audit 400 Invoice
3 Halifax Market 500 NoAction
4 Georgian Markers 400 NoAction
编辑:一行:
sample['results'] = sample['A'].apply(lambda x: 'Invoice' if any(r in x for r in reqs) else 'NoAction')
关于python - Pandas:使用条件和运算符(或和)的 Lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76435275/