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

标签 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 城市变量中的城市名称与 中的城市名称匹配时的整数计数英国城市变量。

下面显示了我的目标输出示例。假设一个名为汉密尔顿的英国城市在美国有两个名为汉密尔顿的城市。对于一个名为爱丁堡的英国城市,在美国有 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 和 unique 的变体,但这些都不起作用。也许我正在以错误的方式接近这个。

最佳答案

使用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 该城市的计数列的值。

关于python - Pandas:返回两个 DataFrame 变量之间匹配值的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33441795/

相关文章:

python - 我在专栏中失去了我的值(value)观

python Pandas : Aggregate rows conditional value picking

python - Numpy:快速设置数组元素

Python Pandas 创建一长串数据框以进行连接

python - 建议正则表达式中的子字符串应根据长度排序的建议背后的原因是什么?

python - 如何使用 Python 通过 App Function 向 Azure 存储表插入数千行

python - 将字符串列转换为 Pandas 数据框中的固定长度字符串数组

python - 使用 Pandas 在excel文件中搜索column_names的起始列和行

python - 循环获取二维三角形中的点

Python插入列表