python - Pandas:使用条件和运算符(或和)的 Lambda 函数

标签 python pandas lambda conditional-statements apply

我正在理解与 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/

相关文章:

python - 如何避免自动更改panda dataframe中的数据类型并在python中转换为CSV?

c# - 如何将动态类型的 Action<T> 传递给方法

java 8 减少累加器返回类型

python - 为什么在 Twisted 中没有实现反向 DNS 解析?

python - 如何获取两个列表中整数和运算的所有组合?

python - py2exe 找不到所有依赖项

python - PyGame MOUSEBUTTONDOWN 事件未注册?

python - 在 python pandas 中,如何保存 'grid chart' ?

python - 无法从 CSV 中提取独特的单词

c# - PowerShell 中的 Linq.First 等价物是什么?