python - 根据条件从数据框中删除行
问题描述
我有以下数据框:
df = pd.DataFrame({"Code": ['9958S135K108MF-1','9958S135-1','9958S105-1','9958S105K84MF-1',], "ID": ['FO995877000581098', 'FO995877000581098','FO995877000581098','FO995877000581098',], "NUM": ['9958S135','9958S135','9958S105','9958S105']})
我需要以下输出:
Code ID NUM
0 9958S135K108MF-1 FO995877000581098 9958S135
3 9958S105K84MF-1 FO995877000581098 9958S105
对于每一个都"ID"
应该有一个独特的"NUM"
。会有很多重复"ID"
诀窍是删除具有重复 '"ID"' 和 "'NUM" 的行时,我需要删除前缀以 . 结尾的行MF-1
。
我试图添加一"Mapping"
列并删除True
该列中的值,但它并不总是分配给包含“MF-1”"True"
的正确行。"Code"
这是我尝试过的:
import pandas as pd
df['Mapping'] = df['NUM'].eq(df['NUM'].shift()) & df['ID'].eq(df['ID'].shift())
Code ID NUM Mapping
0 9958S135K108MF-1 FO995877000581098 9958S135 False
1 9958S135-1 FO995877000581098 9958S135 True
2 9958S105-1 FO995877000581098 9958S105 False
3 9958S105K84MF-1 FO995877000581098 9958S105 True
解决方案
我能够使用以下方法实现我的结果:
df[~df.duplicated(['ID', 'NUM'], keep=False) | df['Code'].astype(str).str.contains('MF-1')]
推荐阅读
- node.js - 如何在节点 js 回调函数中减少嵌套循环?
- php - 从邮递员返回 JSON 令牌
- javascript - 在 Javascript 中检测对象是否为空 - 为什么这不起作用?
- java - 我想从 Realm 数据库中删除数据,但它给了我错误
- angular - 在构建角度应用程序时收到一些警告消息
- r - 通过从 xts 对象中提取信息来创建数据框
- python-3.x - 从列表中查找唯一对
- google-apps-script - Apps 脚本 - 如何检测对话框已关闭
- amazon-web-services - AWS 签名版本 4:无效的字符串签名
- hibernate - Spring with Hibernate - 使用 JOOQ?