You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pandas数据框的区域城市列与RegionCity实例列表匹配?

Pandas匹配Region-City数据类实例的解决方法

原代码报错的核心原因:直接用df['Region']和df['City']这两个Series创建RegionCity对象,得到的是一个包含Series的RegionCity实例,而非逐行生成的单个实例,没法和region_city列表里的实例直接比较,从而触发了歧义错误。

下面是几种可行的解决方法:

方法一:用apply逐行生成实例匹配(保留数据类逻辑)

先把region_city转成集合(提升匹配效率,数据类默认可哈希),再用apply逐行生成RegionCity实例并判断是否在集合中:

from dataclasses import dataclass
import pandas as pd

@dataclass
class RegionCity:
    region: str
    city: str

# 注意修正实例创建方式(原代码append传两个参数会报错)
region_city = []
region_city.append(RegionCity('New York', 'Hempstead town'))
# 转成集合加速匹配
region_city_set = set(region_city)

# 示例数据框
df = pd.DataFrame({
    'Region': ['New York', 'New York', 'California'],
    'City': ['New York City', 'Hempstead town', 'Los Angeles'],
    'Population': ['8,335,897', '393,375', '3,898,747']
})

# 筛选匹配行
filtered_df = df[df.apply(lambda row: RegionCity(row['Region'], row['City']) in region_city_set, axis=1)]
print(filtered_df)

方法二:转元组集合匹配(性能最优)

跳过数据类实例创建,直接把region_city转成(region, city)元组的集合,匹配数据框行的元组:

# 生成元组集合
region_city_tuples = set((rc.region, rc.city) for rc in region_city)

# 直接匹配列组合的元组
filtered_df = df[df[['Region', 'City']].apply(tuple, axis=1).isin(region_city_tuples)]
print(filtered_df)

方法三:用merge内连接(适合大数据量)

把region_city转成小数据框,通过内连接筛选匹配行,Pandas的merge对大数据量优化更好:

# 转成匹配用的小数据框
rc_df = pd.DataFrame([(rc.region, rc.city) for rc in region_city], columns=['Region', 'City'])

# 内连接得到匹配行
filtered_df = pd.merge(df, rc_df, on=['Region', 'City'], how='inner')
print(filtered_df)

各方法适用场景

  • 方法一:需要保留RegionCity数据类的业务逻辑时使用,性能略逊于后两种
  • 方法二:纯列匹配场景下性能最优,代码简洁
  • 方法三:数据量较大时优先选择,利用Pandas向量化操作提升效率

内容的提问来源于stack exchange,提问作者Jas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 03:42:50