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

如何基于两列值过滤DataFrame:提取对应多地点的code数据

提取对应多地点的Code全部记录解决方案

核心需求:筛选DataFrame中code列对应**2个及以上不同location**的所有行,保留这些code的全部记录,排除仅对应单一地点的code。

方法一:GroupBy + Transform 直接映射统计值

通过分组统计每个code的不同location数量,将统计结果映射到原DataFrame的每一行,再筛选符合条件的行:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'code': ['101', '102', '102', '102', '103', '103', '104', '105'],
    'location': ['伦敦', '曼彻斯特', '博尔顿', '奥尔德姆', '利兹', '哈德斯菲尔德', '伯明翰', '利物浦']
})

# 为每行添加对应code的不同location数量
df['loc_count'] = df.groupby('code')['location'].transform('nunique')

# 筛选并移除辅助列
result = df[df['loc_count'] >= 2].drop('loc_count', axis=1)
print(result)

方法二:先筛选有效Code再过滤

先找出符合条件的code列表,再用isin()过滤原DataFrame:

# 统计每个code的不同location数量
code_loc_counts = df.groupby('code')['location'].nunique()

# 获取对应多地点的code列表
valid_codes = code_loc_counts[code_loc_counts >= 2].index

# 过滤原DataFrame
result = df[df['code'].isin(valid_codes)]
print(result)

为什么直接用duplicated()不行?

duplicated()仅判断行(或指定列)是否重复,无法区分「同一code对应多个不同location」和「同一code重复但location相同」的情况。比如一个code多次出现但location全一致,duplicated()会标记重复,但这类code不符合你的需求,因此必须通过统计不同location的数量来筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:59:53