2015-10-30 2 views
2

Это простая вещь, но я не думаю, что она была покрыта на SO или в документации Pandas.Pandas: Возвращает количество совпадающих значений между двумя переменными DataFrame

Данные

Два DataFrames, содержащие данные о городах. DataFrame UK содержит переменную для названий городов Великобритании. Он сгруппирован, чтобы не было дублированных названий городов. Это усеченный пример этой city переменной (не полный DataFrame):

city 
Hamilton 
Edinburgh 
Bury 
... 

DataFrame US содержит соответствующую переменную для названий городов США. Это делает имеют дублированные названия городов, но они не являются фактически дублирующими значениями, так как существует множество городов с тем же именем. Опять же, усеченный пример:

city 
Hamilton 
Hamilton 
Edinburgh 
Edinburgh 
Edinburgh 
Bury 
Bury 
... 

(Примечание. Переменные не такой же длины в моих данных)

Цель

Создать новую переменную в UK DataFrame который является целым числом для каждого времени, когда название города в городской переменной US соответствует имени города в городской переменной UK.

Ниже приведен пример вывода, на который я нацелен. Скажем, для одного британского города под названием Гамильтон есть 2 города под названием Гамильтон в США. Для одного британского города под названием Эдинбург в США есть 3 матча. И 2 матча для Бери.

city  count 
Hamilton  2 
Edinburgh  3 
Bury   2 

Где я застрял

Если я сделаю это ...

uk['count'] = uk['city'].isin(us['city']).astype(int) 

новая переменная является бинарной 1 или 0, указывающее, что есть совпадение, что почти на месте. Однако я борюсь с синтаксисом Pandas, чтобы вернуть счет матчей. Я попытался добавить value_counts и варианты уникальных, но они не сработали. Может быть, я подхожу к этому неправильно.

ответ

1

Использование Series.value_counts для подсчета количества вхождений для каждого города в US['city'], а затем использовать Series.map применить эти отсчеты к соответствующим значениям в UK['city']:

In [40]: US['city'].value_counts() 
Out[40]: 
Edinburgh 3 
Bury   2 
Hamilton  2 
Name: city, dtype: int64 

In [41]: UK['count'] = UK['city'].map(US['city'].value_counts()) 

In [42]: UK 
Out[42]: 
     city count 
0 Hamilton  2 
1 Edinburgh  3 
2  Bury  2 

Если есть город в UK['city'], который не находится в US['city'], то вышеуказанное присвоит значение NaN столбцу count для этого города.

Смежные вопросы