通过字符串前缀连接熊猫数据帧

时间:2019-03-17 13:05:23

标签: python pandas join string-matching

我正在寻找一种对两个pandas.DataFrames执行以下联接的有效方法:

第一个包含在A列中的字符串,例如:

A  ....

Spam|One
Spam|Two
Ham
Eggs

第二个是参考表,其中以字符串键作为索引和文本描述:

index      description
Spam       "..."
Ham        "..." 
Eggs       "...."
BakedBeans "...."

索引中的每个键可以是A中字符串的前缀。现在,我想将描述列添加到列A中,其中A中的值与前缀匹配。我感觉有一种高效的熊猫单眼纸...

我们可以假设A中的所有值的格式均为“ prefix |后缀”或“ prefix”。也许可以加快速度。

1 个答案:

答案 0 :(得分:1)

Series.str.split与列表的第一个值一起使用,将SeriesSeries.map一起使用:

print (df1)
          A
0  Spam|One
1  Spam|Two
2       Ham
3      Eggs

print (df2)  
     description
Spam         aaa
Ham           sd
Eggs         rty

print (df2.index)
Index(['Spam', 'Ham', 'Eggs'], dtype='object')

df1['description'] = df1['A'].str.split('|').str[0].map(df2['description'])
print (df1)
          A description
0  Spam|One         aaa
1  Spam|Two         aaa
2       Ham          sd
3      Eggs         rty

更一般的解决方案应该是Series.str.extract,其中^用于提取起始字符串,而join|用于正则表达式ORdf2.index

pat = '(' + '|'.join('^' + df2.index) + ')'
df1['new'] = df1['A'].str.extract(pat,expand=False).map(df2['description'])