Предположим, у меня есть два фрейма данных, как показано ниже.Как я могу сопоставлять значения из разных фреймов данных на основе некоторых условий или функций с помощью панд?
raw_data = {
'name': ['Jason love you', 'Molly hope wish care', 'happy birthday', 'dog cat', 'tiger legend bird'],
'nationality': ['USA', 'USA', 'France', 'UK', 'UK']
}
raw_data_2 = {
'name_2': ['Jason you', 'Molly care wist', 'hapy birthday', 'dog', 'tiger bird'],
'nationality': ['USA', 'USA', 'France', 'UK', 'JK'],
'code': ['a', 'b','c','d','e']
}
df1 = pd.DataFrame(raw_data, columns = ['name', 'nationality'])
df2 = pd.DataFrame(raw_data_2, columns = ['name_2', 'nationality', 'code'])
Что я хочу сделать, это сопоставление двух данных, основанных на некоторых условиях. Условием здесь является то, что
- если существует имя из
raw_data_2
которое является подмножеством значений (имя) отraw_data_1
, когда эти два имени разделяются пробелом, и - национальность должна быть такой же.
Для облегчения понимания, вот пример: от raw_data_2
, 'Jason You'.split(' ') = ['Jason', 'You']
, так что это подмножество 'Jason Love You'.split(' ') = ['Jason', 'Love', 'You']
. Но 'Molly care wist'.split(' ')
НЕ является подмножеством 'Molly care wish'.split(' ')
, потому что последний не полностью покрывает бывшее (отлично). 'tiger bird'.split(' ')
от raw_data_2
является подмножеством 'tiger legend bird'.split(' ')
, но их национальность отличается.
Если мы отвечаем вышеуказанным условиям, тогда, наконец, я хочу присвоить значение code
с raw_data_2
. Таким образом, желаемый результат (давайте просто взять code
с) было бы как:
'a'(matched), Nan(unmatched), Nan(unmatched), 'd', Nan(unmatched)
Как я могу сделать это с помощью панд? Думаю, это не так просто, как функция isin или функция map.
Играют ли буква случае какую-то роль? – MaxU
В этом случае я не хочу классифицировать нижний/верхний регистр. Давайте просто проигнорируем. – ritos
Вы сравниваете строки за строкой? Или все возможные комбинации? – piRSquared