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

如何对DataFrame执行多行间条件过滤:按location_id筛选client_id

问题描述

原始DataFrame如下:

client_id   location_id      region_name    location_name
1                123          Florida        location_ABC
6                123          Florida(P)     location_ABC
6                845          Miami(P)       location_THE
1                386          Boston         location_WOP
6                386          Boston(P)      location_WOP

需求:

  • 若某个location_id对应多个不同的client_id,选取其中client_id == 1的行;
  • 若某个location_id仅对应一个client_id,保留该行即可。

期望结果:

client_id   location_id      region_name    location_name
1                123          Florida        location_ABC
6                845          Miami(P)       location_THE
1                386          Boston         location_WOP

解决思路

方法一:分组统计+拆分合并

  1. 先统计每个location_id对应的不同client_id数量:
    client_unique_counts = df.groupby('location_id')['client_id'].nunique()
    
  2. 拆分出两类location_id:有多个不同client_id的组,以及只有单个client_id的组:
    multi_client_locs = client_unique_counts[client_unique_counts > 1].index
    single_client_locs = client_unique_counts[client_unique_counts == 1].index
    
  3. 分别筛选对应数据后合并:
    # 多client_id组中取client_id=1的行
    part1 = df[(df['location_id'].isin(multi_client_locs)) & (df['client_id'] == 1)]
    # 单client_id组保留所有行
    part2 = df[df['location_id'].isin(single_client_locs)]
    # 合并并排序,和示例结果对齐
    result = pd.concat([part1, part2]).sort_values('location_id').reset_index(drop=True)
    

方法二:用transform实现行级标记(更简洁)

通过transform给每行添加所在分组的client_id唯一数量,直接按条件过滤:

# 给每行添加该location_id的不同client_id数量
df['client_unique_count'] = df.groupby('location_id')['client_id'].transform('nunique')
# 过滤逻辑:单client_id组直接保留,多client_id组只留client_id=1的行
result = df[
    (df['client_unique_count'] == 1) | 
    ((df['client_unique_count'] > 1) & (df['client_id'] == 1))
].drop('client_unique_count', axis=1)
# 可选:按location_id排序
result = result.sort_values('location_id').reset_index(drop=True)

两种方法都能得到目标结果,方法二无需拆分合并,代码更紧凑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:15:39