如何解决Python:编写一个嵌套循环以测试数据框的列中是否存在一系列字符串值
我有两个数据帧df1
和df2
。 df1
有一个名为'comments'
的列,其中包含一个字符串。 df2
有一个名为'labels'
的列,其中包含较小的字符串。我正在尝试编写一个函数,该函数在df1['comments']
中搜索df2['labels']
中包含的字符串,并为d1
创建一个名为df1['match']
的{{1}}的新变量,如果{ {1}}包含True
和df1['comments']
中的任何字符串,如果df2['labels']
不包含False
中的任何字符串。
我正在尝试使用df1['comments']
解决此问题,并且我设法使用以下功能创建了列df2['labels']
来搜索一个特定的字符串:
df.str.contains('word',na=False)
但是,我很难编写一个函数来迭代df1['match']
中的所有单词,并且如果存在df1['match'] = df1['comment'].str.contains('mystring',na=False)
中的任何单词,则用df2['label']
创建一个df1['match']
否则为True
。
这是我编写循环的尝试:
df2['label']
False
任何帮助将不胜感激。
解决方法
您可以使用管道通过正则表达式搜索进行多个子字符串搜索。 See this post
df1['match'] = df['comment'].str.contains('|'.join(df2['label'].values),na=False)
,
我不知道会有什么帮助,但是更好的比较方法是下面的方法。效率很高。
如果On Format
要一行一行地提及,则代码需要进行一些更改。但是我认为您已经真正想要了。
df1['match']
,
尝试此操作
<td style="text-align: right" aria-describedby="ccc2df23-b49a-4b00-820a-02a67c428a52" role="gridcell" id="Grid_active_cell" class="k-edit-cell" data-role="editable">
<input type="text" class="k-input k-textbox" name="SenderMatch" data-bind="value:SenderMatch">
</td>
,
这是完整的代码,如果您要的是这,请告诉我
import pandas as pd
d = {'comment': ["abcd efgh ijk","lmno pqrst uvwxyz","123456789 4567895062"]}
df1 = pd.DataFrame(data=d)
print(df1)
d = {'labels': ["efgh","pqrst","12389"]}
df2 = pd.DataFrame(data=d)
print(df2)
df2['match'] = "False"
for idx,word in enumerate(df2['labels']):
q = df1['comment'][idx:].str.contains(word)
df2['match'][idx] = q[idx]
print("final df2")
print(df2)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。