python - 如何检查 Pandas 列是否具有字符串列表中的值?
问题描述
我有一个数据框和一个列表
df = pd.DataFrame({'IDs':[1234,5346,1234,8793,8793],
'Names':['APPLE ABCD ONE','APPLE ABCD','NO STRAWBERRY YES','ORANGE AVAILABLE','TEA AVAILABLE']})
kw = ['APPLE ABCD', 'ORANGE', 'LEMONS', 'STRAWBERRY', 'BLUEBERRY', 'TEA COFFEE']
我想创建一个新列flag
,如果Names
列包含关键字 from kw
,则标志将为 1,否则为 0。
预期输出:
IDs Names Flag
0 1234 APPLE ABCD ONE 1
1 5346 APPLE ABCD 1
2 1234 NO STRAWBERRY YES 1
3 8793 ORANGE AVAILABLE 1
4 8793 TEA AVAILABLE 0
我可以使用以下代码获得输出:
ind=[]
for idx, value in df.iterrows():
x = 0
for u in kw:
if u in value['Names']:
ind.append(True)
x = 1
break
if x == 0:
ind.append(False)
df['flag'] = ind
是否有另一种方法可以避免 for 循环并使其更有效?
解决方案
使用apply
和lambda
喜欢:
df['Names'].apply(lambda x: any([k in x for k in kw]))
0 True
1 True
2 True
3 True
4 False
Name: Names, dtype: bool
推荐阅读
- java - 如何使用 cmd.exe 从 java 打印⛀?
- java - 在arraylist中移动一个元素后的另一个元素
- javascript - *已解决*单击按钮后如何执行功能?
- amazon-web-services - 当 index.html 位于子文件夹中时,S3 URL 的外观如何?
- python - 熊猫无法识别较早的日期(1600 年前)
- python - pyannotate apply 说“不需要修改任何文件。” 即使函数没有注释
- migration - 应用程序和 Quarkus 的迁移工具包
- python - 结合 while 循环的结果进行绘图
- python - Tkinter - 为什么我的 python 类被调用?
- nginx-config - 连接上游时无法解决 Nginx 502 Bad Gateway 和 connect() 错误(111:连接被拒绝)