Pandas: передать НЕСКОЛЬКО условий в параметре ON в pandas .merge - PullRequest
0 голосов
/ 23 февраля 2020

Как объединить два pandas кадра данных, если совпадение ключа и идентификатора столбца не совпадают?

testchunck1.csv:

excel1 user_id public_key
0      Mark    key1
1      Rhonda  key2
2      Clara   key3
3      Riley   key4

testchunck2.csv:

excel2 user_id public_key
0      Ron     key2
1      Russel  key1
2      Dwyane  key2
3      Abrax   key4

output_df:

           userid_left  public_key  userid_right
    0      Mark         key1        Russel 
    1      Rhonda       key2        Ron 
    2      Rhonda       key2        Dwyane

Примечание : key4 совпадает в обоих DF, но идентификатор (3) одинаков, поэтому его нет в выходных данных

Мой код:

test1Excel = pd.read_csv("testchunk.csv")
test2Excel = pd.read_csv("testchunk2.csv")

df = pd.merge(test1Excel,test2Excel, on='public_key', how='inner', suffixes = ('_left','_right')).dropna()
  1. Попытка использовать .filter() для фильтрации строк после объединения, но безуспешно.
  2. Пробовал читать каждую строку Excel, чтобы проверить, совпадают ли идентификаторы, но это заняло много времени.
  3. Попытка передать условие в самом параметре on, но это не позволяет

Следовательно, переход к SO.

1 Ответ

0 голосов
/ 23 февраля 2020

Попробуйте:

df = pd.merge(test1Excel.loc[test1Excel["public_key"].str.startswith("key")].reset_index(),test2Excel.loc[test2Excel["public_key"].str.startswith("key")].reset_index(), on='public_key', how='inner', suffixes = ('_left','_right')).dropna().query("index_left!=index_right").drop(columns=["index_left", "index_right"])

Выходы:

  excel1 user_id_left public_key excel2 user_id_right
0      0         Mark       key1      1        Russel
1      1       Rhonda       key2      0           Ron
2      1       Rhonda       key2      2        Dwyane
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...