如何移除DataFrame中同一ID下Info列值完全相同的所有行
解决方法:移除ID对应Info值无变化的行
嘿,这个需求其实用pandas的分组和筛选就能轻松搞定,我给你一步步拆解:
1. 先构造示例数据
首先我们先把你给出的DataFrame用代码还原出来:
import pandas as pd df = pd.DataFrame({ 'id': [1, 1, 2, 2, 3, 3], 'info': [0, 0, 0, 10, 20, 20] })
2. 核心处理逻辑
我们的目标是只保留那些同一个ID下Info列存在不同值的组,具体步骤如下:
- 按
id分组,计算每个组里info列的唯一值数量 - 筛选出唯一值数量大于1的ID(也就是Info有变化的ID)
- 用这些ID去过滤原DataFrame,得到最终结果
对应的代码是:
# 第一步:找出Info值有变化的ID valid_ids = df.groupby('id')['info'].nunique()[lambda x: x > 1].index # 第二步:筛选出这些ID对应的所有行 result = df[df['id'].isin(valid_ids)]
3. 查看结果
运行上面的代码后,result就是我们要的预期输出:
id info 2 2 0 3 2 10
简单解释下关键函数:
groupby('id')['info'].nunique():统计每个ID组里Info的唯一值数量,比如ID=1的组只有1个唯一值,ID=2的组有2个,ID=3的组只有1个lambda x: x > 1:筛选出唯一值数量大于1的ID,也就是存在Info值变化的IDisin(valid_ids):只保留原DataFrame中ID属于valid_ids的行
内容的提问来源于stack exchange,提问作者Zac R.
相关产品推荐
相关产品推荐

