这是一件简单的事情,但我不认为它已被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
和独特的变体,但这些都没有用。也许我以错误的方式接近这个。
答案 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']
值。