python - Pandas:根据某些条件删除重复行
问题描述
我在 excel 中有一个数据集,如下所示。
name,role,org
abc,admin,123
abc,agent,123
abc,end-user,123
abc,admin,124
abc,admin,123
bcd,admin,125
abc,admin,126
abc,agent,127
abc,agent,123
abc,end-user,130
abc,end-user,130
abc,agent,123
bc,agent,123
bc,admin,123
vcf,end-user,123
我正在尝试根据某些条件过滤一些用户。
管理员和代理不能在一个组织中有多个名称。
一个组织可以有许多同名的最终用户(所以希望最终用户保持原样)
从昨天开始我尝试了很多东西,但没有运气。这是我正在尝试的
df.loc[(df['role'] == 'agent' ) | (df['role'] == 'admin' ) | (~df['org'] )]
但上面的代码正是将行作为输入返回。
这个你能帮我吗
预期输出
name,role,org
abc,admin,123
abc,agent,123
abc,end-user,123
abc,admin,124
bcd,admin,125
abc,admin,126
abc,agent,127
abc,end-user,130
abc,end-user,130
bc,agent,123
bc,admin,123
vcf,end-user,123
解决方案
使用Series.isin
withDataFrame.duplicated
删除agent, admin
每 3 列的重复项:
df1 = df[~(df['role'].isin(['agent','admin']) & df[['org', 'role', 'name']].duplicated())]
如果只有 3 列:
df1 = df[~(df['role'].isin(['agent','admin']) & df.duplicated())]
print (df1)
name role org
0 abc admin 123
1 abc agent 123
2 abc end-user 123
3 abc admin 124
5 bcd admin 125
6 abc admin 126
7 abc agent 127
9 abc end-user 130
10 abc end-user 130
12 bc agent 123
13 bc admin 123
14 vcf end-user 123
推荐阅读
- ios - 如何在iOS Swift中将嵌套json中的值解析为具有多个标签的tableview单元格
- c++ - 具有提供三角形网格的连通分量的函数的奇怪错误
- c# - 想要在与障碍物碰撞后停止移动玩家对象
- macos - 为什么 CFMessagePortCreateRemote 总是返回 NULL?
- python - 在 Python 中自动创建变量
- c - While 循环不会在每次迭代时执行语句
- python - Python - slice([1,2,3]) 如何工作以及 slice(None, [1, 3], None) 代表什么?
- mysql - 选择逗号分隔字符串中的不同子字符串 | mysql
- javascript - react 输入值需要通过 useState 钩子设置才能运行 onChange 事件,但是在我运行突变后它是空的
- c++ - 如何告诉 Visual Studio 我的标头应该是 C++ 而不是 C?