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

时间:2015-10-30 17:35:17

标签: python pandas

这是一件简单的事情,但我不认为它已被SO或Pandas文档所涵盖。

数据

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

city
Hamilton
Edinburgh
Bury
...

DataFrame US包含美国城市名称的相应变量。 具有重复的城市名称,但这些城市名称实际上并不重复,因为有许多城市具有相同的名称。同样,一个截断的例子:

city
Hamilton
Hamilton
Edinburgh
Edinburgh
Edinburgh
Bury
Bury 
...

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

目标

UK DataFrame中创建一个新变量,每当US城市变量中的城市名称与UK城市变量中的城市名称匹配时,该变量就是整数。 / p>

下面显示了我的目标输出示例。比如说一个名叫汉密尔顿的英国城市,在美国有两个名叫汉密尔顿的城市。对于一个名为爱丁堡的英国城市,美国有3场比赛。 Bury有2场比赛。

city       count
Hamilton       2
Edinburgh      3
Bury           2

我被困的地方

如果我这样做......

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

新变量是二进制1或0,表示存在匹配,即中途。但是,我正在努力使用Pandas语法来返回匹配的 count 。我尝试追加value_counts和独特的变体,但这些都没有用。也许我以错误的方式接近这个。

1 个答案:

答案 0 :(得分:4)

使用Series.value_counts计算Button中每个城市的出现次数,然后使用Series.map将这些计数应用于US['city']中的相应值:

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']值。