У меня есть два DataFrames, каждый из которых содержит информацию об учетной записи клиента (например, имя, адрес, продажи, широту и долготу). Оба кадра данных имеют широту и долготу учетной записи. Я хотел бы сопоставить учетные записи в двух кадрах данных на основе широты и долготы, сделав предположение, что если широта и долгота обе математические в 4 знаках после запятой, то учетные записи также должны совпадать. Результатом будет новая серия (например, «Соответствует») в одном из двух кадров данных, которая равна «1», если есть совпадение, или «0», если совпадения нет.
Как я могу сделать это с помощью Pandas?
Синтезируйте строковый столбец «широта, долгота», отформатированный до вашей любимой десятичной точности.
Тогда просто .merge( ... )
ваши кадры данных на этом.
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html
Как объединить два столбца? Создайте третий столбец, преобразовав строку широты и долготы в строку и объединив ее в один столбец — может быть, это работает, но это немного неуклюже?
Настройка проблемы неявно предполагает, что один или несколько фреймов данных имеют широту/длину с точностью до 5 цифр или более. Смысл синтеза нового поля не в том, чтобы объединить два столбца. Скорее, это позволяет снизить точность сравнения с помощью простого оператора равенства, не возясь с такими выражениями, как abs(lat1 - lat2) < thresh
. У вас также есть np.format_float_positional(lat1, precision=4)
в вашем распоряжении, если хотите. xkcd.com/2170
Спасибо @J_H — вы правы — вы можете объединить два ключа, передав список параметру «on». Это решило проблему.
Пожалуйста, предоставьте пример кадра данных