熊猫:返回两个DataFrame变量之间匹配值的计数

RDJ*_*RDJ 2 python pandas

这很简单,但我认为SO或Pandas文档中都没有涉及。

数据

两个DataFrame包含有关城市的数据。DataFrame UK包含一个用于英国城市名称的变量。已将其分组,因此没有重复的城市名称。这是该city变量的截断的示例(不是完整的DataFrame):

city
Hamilton
Edinburgh
Bury
...
Run Code Online (Sandbox Code Playgroud)

DataFrame US包含美国城市名称的相应变量。它确实有重复的城市名称,但实际上并没有重复的值,因为有许多城市使用相同的名称。再次,一个截断的示例:

city
Hamilton
Hamilton
Edinburgh
Edinburgh
Edinburgh
Bury
Bury 
...
Run Code Online (Sandbox Code Playgroud)

(注意:变量在我的数据中的长度不同。)

目的

UKDataFrame中创建一个新变量,该变量是每次US城市变量中的城市名称与城市变量中的城市名称匹配时的整数计数UK

下面显示了我要输出的示例。假设有一个英国城市叫汉密尔顿,在美国有2个城市叫汉密尔顿。英国一个名为爱丁堡的城市,在美国有3场比赛。和Bury的2场比赛。

city       count
Hamilton       2
Edinburgh      3
Bury           2
Run Code Online (Sandbox Code Playgroud)

我被困在哪里

如果我这样做

uk['count'] = uk['city'].isin(us['city']).astype(int)
Run Code Online (Sandbox Code Playgroud)

新变量是二进制1或0,表示存在匹配项,位于中间。但是我在努力用Pandas语法返回匹配计数。我已经尝试过添加value_counts唯一性和变体,但是这些没有用。也许我走错了路。

unu*_*tbu 5

使用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
Run Code Online (Sandbox Code Playgroud)

如果有一个UK['city']不在的城市,US['city']则上面将为该NaN城市的计数列分配一个值。