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

Pandas如何筛选b列值发生变化的对应id的全部行数据

pandas筛选b列发生变动的id对应全部行实现方法

核心思路

  • 先识别所有b列存在多个不同取值的id
  • 再从原数据中提取这些id对应的所有行,即为目标结果

标准实现(通用场景)

import pandas as pd

# 替换为你自己的数据读取代码,例如读取csv、数据库数据等
# df = pd.read_csv("your_dataset_path.csv")

# 按id分组,统计每个id对应b列的唯一值数量,唯一值数>1即代表b列发生过变化
id_has_change = df.groupby('id')['b'].nunique() > 1
# 提取所有符合条件的目标id
target_id_list = id_has_change[id_has_change].index
# 过滤原表得到最终结果
final_result = df[df['id'].isin(target_id_list)]

该写法逻辑严谨,可以覆盖b列多次变动、首尾值巧合一致但中间存在变化的场景,适配绝大多数常规数据集。

大数据集优化写法

如果你的数据量达到百万、千万级,上述分组统计的写法内存开销较高,可以用去重逻辑降低计算量:

# 仅提取id和b两列去重,大幅降低待处理数据量
unique_id_b_pair = df[['id', 'b']].drop_duplicates()
# 找出在去重结果中出现超过1次的id,即对应b列有变动的id
target_id_list = unique_id_b_pair[unique_id_b_pair.duplicated('id', keep=False)]['id'].unique()
# 过滤原表得到结果
final_result = df[df['id'].isin(target_id_list)]

效果验证

用测试样例验证逻辑:
假设原始测试数据如下:

idbcol3
1xv1
1xv2
2yv3
2zv4
3mv5
3mv6

运行代码后,id=1、id=3的b列全程无变动会被过滤,仅保留id=2的全部两行,和预期结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.13 16:15:55