如何在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
相关产品推荐
相关产品推荐

