Я выполняю сопоставление (вид нечеткого соответствия) между названиями компаний двух фреймов данных. Для этого сначала я выполняю полное слияние между всеми названиями компаний, где совпадает исходный алфавит. Это означает, что все компании, начинающиеся с «А», будут сопоставляться со всеми компаниями, начиная с «А» в другой структуре данных. Это делается следующим образом:Содержит функцию в Pandas
df1['df1_Start'] = df1['company1'].astype(str).str.slice(0,2)
df2['df2_Start'] = df2['company2'].astype(str).str.slice(0,2)
Merge = pd.merge(df1,df2, left_on='df1_Start',right_on='df2_Start')
Теперь я хочу, чтобы все строки из FullMerge, где компания в df1 содержит компанию в df2. Это связано с тем, что компании в df1 имеют удлиненные имена.
Merge1=Merge[Merge['company1'].str.contains(Merge['company2'].str)]
Это не работает для меня. Как выполнить эту задачу? Также, пожалуйста, предложите, какие другие способы можно использовать для соответствия названиям компаний. Потому что компании могут быть одинаковыми в двух кадрах данных, но не написаны точно так же.
Спасибо! Как я могу изменить это, так что компания1 должна содержать только компанию2 в начале, а не где-то посередине? Потому что выше дает мне несколько ложных срабатываний. – ComplexData
Мне кажется, вам нужно '^' - начало регулярного выражения string -'Merge1 = Merge [FullMerge ['company1']. Str.contains ("|" .join (Merge ['^' + 'company2']. Tolist())] ' – jezrael