【问题标题】:Pandas: Return count of matching values between two DataFrame variablesPandas:返回两个 DataFrame 变量之间匹配值的计数
【发布时间】:2015-10-30 17:35:17
【问题描述】:

这是一件简单的事情,但我认为 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 城市变量中的城市名称匹配时的整数计数。

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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用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 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      相关资源
      最近更新 更多