Pandas 部分字符串匹配,反向包含

Pandas partial string matching, reverse of contains

我有两个数据框,我想进行查找以根据部分字符串匹配将一个数据框的一列值添加到另一个数据框。 (在我的真实情况下,有多个列用于匹配适当的行。)第一个数据框是:

idx   name        age
0     Anne        30
1     Bob         31
2     Chuck       32

第二个是

idx   sex    comment
0     M      'Bob is great!'
1     F      'Way to go Anne!'
2     M      'Woodchuck'

我想将年龄列添加到第二个数据框,使用评论字符串包含员工姓名的值。即,从 df2['comment'].

中找到引用字符串中包含 name 列中的字符串的 df1 行

但这是str.contains()函数的反转。在这种情况下,我需要的是一个 "is in" 函数,例如:

df2['age'] = df2.apply(lambda row: df1['name'].str.isin(row['comment']), axis=1)

但 Pandas 似乎没有这个。最终结果应该是这样的

idx   sex    comment             age
0     M      'Bob is great!'     31
1     F      'Way to go Anne!'   30
2     M      'Woodchuck'         32

如何在 pandas 系列中实现对部分字符串的反向查找?

(以防万一,实际字符串是日文字符)

您可以使用 str.contains,这将导致类似这样的结果:

import pandas as pd
import numpy as np
#Create the column in the target dataframe
df2['age'] = pd.Series(np.NaN,index=df2.index)

for index,row in df1.iterrows():
    df2.loc[(df2['comment'].str.contains(row['name'])).fillna(False),'age'] = row['age'] 

这应该将 df2 中包含 df1 中名称的所有行都具有相应的年龄

要添加多个条件,您可以使用:

mask = (condition1) & (condition2)
df2.loc[mask,'age'] = row['age']