Панды 'concat / upsert' датафреймы - PullRequest
       0

Панды 'concat / upsert' датафреймы

0 голосов
/ 26 сентября 2018

Я ищу эффективный способ выбрать совпадающие строки в 2 x кадрах данных на основе значения общей строки и вставить их в новый кадр данных, который я могу использовать для отображения различий между их пересечением в третий немного другой кадр данных, которыйсравнивает их.

**Example:**

DataFrame1
FirstName, City
Mark, London
Mary, Dallas
Abi, Madrid
Eve, Paris
Robin, New York

DataFrame2
FirstName, City
Mark, Berlin
Abi, Delhi
Eve, Paris
Mary, Dallas
Francis, Rome

В фреймах данных у меня есть потенциальное совпадение / перекрытие по «имени», поэтому пересечение по ним:

Mark, Mary, Abi, Eve

исключено из объединения:

Robin, Francis

Я создаю фрейм данных, который позволяет сравнивать значения из обоих:

DataFrameMatch
FirstName_1, FirstName_2, FirstName_Match, City_1, City_2, City_Match

И вставлять / обновлять (upsert), поэтому мой вывод:

DataFrameMatch
FirstName_1  FirstName_2  FirstName_Match  City_1  City_2  City_Match
Mark         Mark         True             London  Berlin  False
Abi          Abi          True             Madrid  Delhi   False
Mary         Mary         True             Dallas  Dallas  True
Eve          Eve          True             Paris   Paris   True

Затем я могу сообщить о разнице между двумя списками и о том, какие конкретные поля отличаются.

1 Ответ

0 голосов
/ 26 сентября 2018

merge

По вашему выводу.Вы хотите только строки, где 'FirstName' соответствует.Затем вам нужен еще один столбец, который оценивает, совпадают ли города.

d1.merge(d2, on='FirstName', suffixes=['_1', '_2']).eval('City_Match = City_1 == City_2')

  FirstName  City_1  City_2  City_Match
0      Mark  London  Berlin       False
1      Mary  Dallas  Dallas        True
2       Abi  Madrid   Delhi       False
3       Eve   Paris   Paris        True

Подробно

Вы можете сделать простой merge и в конечном итоге получить

  FirstName    City
0      Mary  Dallas
1       Eve   Paris

Который принимает все общие столбцы по умолчанию.Поэтому мне пришлось ограничить столбцы с помощью аргумента on, поэтому on='FirstName'

d1.merge(d2, on='FirstName')

  FirstName  City_x  City_y
0      Mark  London  Berlin
1      Mary  Dallas  Dallas
2       Abi  Madrid   Delhi
3       Eve   Paris   Paris

, который приближает нас, но теперь я хочу настроить эти суффиксы.

d1.merge(d2, on='FirstName', suffixes=['_1', '_2'])

  FirstName  City_1  City_2
0      Mark  London  Berlin
1      Mary  Dallas  Dallas
2       Abi  Madrid   Delhi
3       Eve   Paris   Paris

НаконецЯ добавлю новый столбец, который показывает, что оценка 'city_1' равна 'city_2'.Я решил использовать pandas.DataFrame.eval.Вы можете увидеть результаты выше.

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