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

Python 通过字符串前缀连接数据帧,python,pandas,join,string-matching,Python,Pandas,Join,String Matching,我正在寻找一种在两个pandas.DataFrames上执行以下连接的有效方法: 第一个在A列中包含如下字符串: A .... Spam|One Spam|Two Ham Eggs 第二个是以字符串键作为索引和文本描述的参考表: index description Spam "..." Ham "..." Eggs "...." BakedBeans "...." 索引中的每个键都可以是a中字符串的前缀。现在我想将description列

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

第一个在
A列中包含如下字符串:

A  ....

Spam|One
Spam|Two
Ham
Eggs
第二个是以字符串键作为索引和文本描述的参考表:

index      description
Spam       "..."
Ham        "..." 
Eggs       "...."
BakedBeans "...."
索引中的每个键都可以是
a
中字符串的前缀。现在我想将description列连接到列A,其中A中的值与前缀匹配。我有一种感觉,有一个有效的熊猫一班轮为它

我们可以假设
A
中的所有值的格式都是“prefix | suffix”或“prefix”。也许这可以加快速度。

与列表的“选择第一个值”和“按系列”
一起使用:

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
更一般的解决方案应该是,对于提取起始字符串使用
^
,对于正则表达式使用
|
或通过
df2使用
连接

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