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

如何在Pandas DataFrame中遍历并筛选各销售区域内EWZ值相同的记录?

解决Pandas按区域筛选重复EWZ记录的问题

嘿,我明白你的需求了——你想要把每个销售区域里,人口规模EWZ重复的所有记录都挑出来对吧?别用嵌套if或者iterrows()啦,Pandas有更简洁高效的矢量化方法,完全不用手动遍历每一行,处理你那11000条数据简直小菜一碟。

核心思路

我们要找的是同一sales_territory内,EWZ值出现不止一次的所有记录。关键是要同时结合「区域」和「EWZ值」两个维度来判断重复,而不是单独看某一列。

一步到位的解决方案

用Pandas的duplicated()方法就能直接搞定,代码非常简洁:

# 筛选出所有区域内EWZ重复的记录
all_duplicate_records = df[df.duplicated(subset=['sales_territory', 'EWZ'], keep=False)]

参数解释:

  • subset=['sales_territory', 'EWZ']:指定基于这两列来判断是否重复,意思是只有当同一区域内的EWZ值完全相同时,才判定为重复。
  • keep=False:默认keep='first'只会标记后续重复的行,而keep=False会把所有重复的行(包括第一次出现的)都标记为True,这样就能把同一区域内EWZ相同的所有记录都捞出来。

拆分到不同变量(可选)

如果你需要把不同区域的重复记录分别存入单独变量,比如只看east的重复,或者north的重复,只需要在上面的结果上再做一次筛选:

# 拆分各区域的重复记录
east_duplicates = all_duplicate_records[all_duplicate_records['sales_territory'] == 'east']
north_duplicates = all_duplicate_records[all_duplicate_records['sales_territory'] == 'north']
south_duplicates = all_duplicate_records[all_duplicate_records['sales_territory'] == 'south']
west_duplicates = all_duplicate_records[all_duplicate_records['sales_territory'] == 'west']

为什么不用iterrows()或嵌套if?

  • 效率极低:iterrows()是逐行遍历处理,对于11000条数据来说,速度会比矢量化操作慢几十甚至上百倍。
  • 代码冗余:嵌套if需要写大量判断逻辑,容易出错,而上面的方法只用一两行代码就能实现相同效果。

举个例子,如果north区域里有20条EWZ=20000的记录,用这个方法会直接把这20条全部筛选出来,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 06:37:27