大熊猫包含列表中的确切字符串

时间:2020-08-04 21:01:16

标签: python pandas

我有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))]

enter image description here

不应显示菠萝,因为这不完全匹配。

我如何获得这样的结果:

enter image description here

3 个答案:

答案 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

这将查找完整的单词。