присоединение к пандам данных с помощью префикса строки - PullRequest
1 голос
/ 17 марта 2019

Я ищу эффективный способ выполнить следующее соединение двух панд. Рамки данных:

Первый содержит в столбце A такие строки, как:

A  ....

Spam|One
Spam|Two
Ham
Eggs

Вторая - справочная таблица со строковыми ключами в качестве индекса и текстовое описание:

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

Каждый ключ в индексе может быть префиксом строки в A. Теперь я хотел бы присоединить столбец описания к столбцу A, где значение в A соответствует префиксу. У меня такое ощущение, что для этого есть эффективный однострочный панд ...

Мы можем предположить, что все значения в A имеют формат «префикс | суффикс» или «префикс». Возможно, это может ускорить процесс.

1 Ответ

1 голос
/ 17 марта 2019

Используйте Series.str.split для выбора первых значений списков и Series.map для Series:

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'])
...