熊猫部分字符串匹配,包含的反向

时间:2018-08-08 09:11:08

标签: python string pandas lookup

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

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'

我想使用注释字符串包含员工姓名的值将年龄列添加到第二个数据框。也就是说,找到df1的行,其中df2 ['comment']的参考字符串中包含名称列中的字符串。

但这是str.contains()函数的反向。在这种情况下,我需要的是“处于”功能,例如:

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

但是熊猫似乎没有这个。最终结果应该像

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

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

(如果重要的话,实际的字符串是日语字符)

1 个答案:

答案 0 :(得分:1)

您可以使用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中包含名称的所有行都具有相应的年龄

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

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