这是一件简单的事情,但我认为 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/