我有2个数据帧df1和df2。
我想获得df1中所有与df2列B中的字符串完全匹配的行 这是df1:
df1={"columnA":['apple,cherry','pineple,lemon','banana, pear','cherry, pear, lemon']}
df1=pd.DataFrame(df1)
这是df2:
df2={"columnB":['apple','cherry']}
df2=pd.DataFrame(df2)
以下代码输出不正确的结果:
df1[df1['columnA'].str.contains('|'.join(df2['columnB'].values))]
不应显示菠萝,因为这不完全匹配。
我如何获得这样的结果:
答案 0 :(得分:2)
没有实际可复制的代码,很难为您提供帮助,但是我认为这应该可行:
words = [rf'\b{string}\b' for string in df2.columnB]
df1[df1['columnA'].str.contains('|'.join(words))]
答案 1 :(得分:0)
df1={"columnA":['apple,cherry','pineple,lemon','banana, pear','cherry, pear, lemon']}
df1=pd.DataFrame(df1)
df2={"columnB":['apple','cherry']}
df2=pd.DataFrame(df2)
更大的方法,但是正确且简单
list1=[]
for i in range(0,len(df1)):
for j in range(0,len(df2)):
if(df2["columnB"][j] in df1["columnA"][i]):
list1.append(i)
break
df=df1.loc[list1]
答案
ColumnA
0 apple,cherry
3 cherry, pear, lemon
答案 2 :(得分:-1)
您非常亲密,但是您需要使用正则表达式的字运算符:
Dim table As ListObject
Set table = Worksheets("Overview").ListObjects("Table1")
table.Range.AutoFilter Field:=13, Criteria1:=TeamRole
table.Range.AutoFilter Field:=8, Criteria1:="<" & MaxDate
On Error Resume Next
Dim rngToCopy As Range
Set rngToCopy = table.DataBodyRange.SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Not rngToCopy Is Nothing Then
rngToCopy.Copy Destination:= Sheets("Assembly Engineer").Range("A2")
End If
table.Range.AutoFilter
这将查找完整的单词。