Оптимизация функции применения с несколькими фреймами данных в Python - PullRequest
0 голосов
/ 20 февраля 2019

Я новичок в Python и очень надеюсь, что вы поможете мне с моей проблемой.

Я предоставил два кадра данных:

d1 (несколько списков)

d1 = pd.DataFrame({
'city': ['New York', 'Chicago', 'Los Angeles','Washington, D.C.', 'San Francisco',
'New York City', 'Francisco', 'Washington', 'Dallas', 'Miami',  'Boston'],
'value':[ 10 , 5 , 7 , 8 , 9 , 10 , 9 , 8 , 10 , 4 , 3 ]})

d2 ("master" - DataFrame .. элементы, перечисленные только один раз)

d2 = pd.DataFrame({
'city': ['New York City', 'Los Angeles','Washington', 'San Francisco', 'Dallas'],
'value':[ 10 , 7 , 8 , 9 , 10 ]})

Что я хочу сделать сейчас:

  • Взять каждый список из d1
  • Поиск, если 'd1.value' существует в d2
    • Для каждого результата:
    • сравнить названия городов (не 1: 1, но как "содержит"), поэтому:если d1.city в d2.city ИЛИ d2.city в d1.city
    • При сопоставлении: установите флаг в новом столбце "MatchWithD2" в d1

У меня уже есть решение для него с apply, но это занимает так много времени (для больших версий d1 и d2):

def add_flag(x):
dfRet= d2.apply(lambda y: y['city']
       if ((x['value'] == y['value']
            and x['city'] in y['city'] or y['city'] in x['city']))
       else None, axis=1)
dfRet= dfRet.dropna(axis=0,how='all')
if dfRet.empty:
    dfRet=np.nan
else: 
    dfRet= dfRet.to_string(index=False) 
return dfRet

d1['MatchWithD2'] = d1.apply(add_flag, axis =1)

Не могли бы вы помочь мне с этой проблемой?

Большое спасибо !!

С наилучшими пожеланиями!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...