Python pandas: найдите значение в другом фрейме данных и замените его

#python #string #pandas #matching

#python #строка #pandas #соответствие

Вопрос:

У меня есть два фрейма данных df_l (с 3000 строками) и df_s (со 100 строками): df_l

 version|update_date
2.3.4| date1
3.4.5|date2
  

и df_s

 version|release_date
    2.3.4| date1
    3.4.5|date2
    3.3.3|date3
  

Я хочу проверить, находится ли версия в df_l в df_s, затем я хочу обновить значения в df_l.update_date до df_s.release_date . Вот мой код

 df_l.ix[df_l['version'].isin(df_s['version']),'update_date'] = df_s['release_date']
  

но обновленные значения в df_l.update_date неверны, я предполагаю, что сопоставление выполняется неправильно. Кто-нибудь может помочь?

Ответ №1:

IIUC, который вам нужен merge , с внутренним соединением how='inner' , которое по умолчанию. Также вы можете опустить on , если в обоих DataFrames только 2 столбца, и один из них одинаков в обоих:

 print (pd.merge(df_l, df_s))
  version update_date release_date
0   2.3.4       date1        date1
1   3.4.5       date2        date2
  

Комментарии:

1. спасибо за ваш ответ, но я проверяю, находится ли, например, 2.3 из df_l в df_s, который затем будет охватывать, например, 2.3.1 и т.д.

2. Я разговариваю только по телефону до воскресенья. Но я думаю, что вы можете создать Series из df_s by s=df_s.set_index('version')['release_date'] , а затем сопоставить df_l с ним. df=df_l.set_index('version').map(s) . Затем получите NaN, когда нет совпадений, поэтому я думаю, что нужно df=df.combine_first(df_l) . Это непроверено, но я надеюсь, что я вам помогу.

3. Я думаю, вам нужно [] подобное df=df_l.set_index('version')['update_date'].map(s) . В предыдущем комментарии это неверно.