我正在寻找一种对两个pandas.DataFrames执行以下联接的有效方法:
第一个包含在A
列中的字符串,例如:
A ....
Spam|One
Spam|Two
Ham
Eggs
第二个是参考表,其中以字符串键作为索引和文本描述:
index description
Spam "..."
Ham "..."
Eggs "...."
BakedBeans "...."
索引中的每个键可以是A
中字符串的前缀。现在,我想将描述列添加到列A中,其中A中的值与前缀匹配。我感觉有一种高效的熊猫单眼纸...
我们可以假设A
中的所有值的格式均为“ prefix |后缀”或“ prefix”。也许可以加快速度。
答案 0 :(得分:1)
将Series.str.split
与列表的第一个值一起使用,将Series
与Series.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
由|
用于正则表达式OR
由df2.index
:
pat = '(' + '|'.join('^' + df2.index) + ')'
df1['new'] = df1['A'].str.extract(pat,expand=False).map(df2['description'])