python - 如何通过对两列施加的多个标准删除 Pandas 数据框中的行?
问题描述
这是一个捕捉我的问题的玩具示例。请问有什么帮助吗?谢谢!
d = {'a': [1,1,1,2,2,2,3,3,3],
'b': [1,2,3,1,2,3,1,2,3]}
df = pd.DataFrame(d)
针对这个结果:
我想用 (a,b) = (1,3) 或 (2,1) 删除两行。
result = pd.DataFrame({'a': [1,1,2,2,3,3,3],
'b': [1,2,2,3,1,2,3]})
实际上,我会有一个随时间更新的排除列表: excl = [[1,3],[2,1],[3,4],........]
解决方案
当我们应该能够挥手时,这感觉就像发射大炮,但是:
df = pd.DataFrame({'a': [1,1,1,1,2,2,2,3,3,3],
'b': [1,1,2,3,1,2,3,1,2,3]})
excl = [[1, 3], [2, 1]]
keep = df.merge(pd.DataFrame(excl, columns=['a','b']),
how='left', indicator=True)._merge == 'left_only'
给我
In [91]: df.loc[keep]
Out[91]:
a b
0 1 1
1 1 1
2 1 2
5 2 2
6 2 3
7 3 1
8 3 2
9 3 3
(注意,出于理智的目的,我添加了重复的 1,1 行。)
疯狂的方法#2:(有效地)使用分类编码:
codes = pd.concat([df, edf], sort=False).groupby(["a","b"]).ngroup()
keep = ~codes.iloc[:len(df)].isin(codes.iloc[len(df):])
df = df.loc[keep]
推荐阅读
- javascript - couchbase 按部分键查看查询组
- powershell - 带有 Get-Mailbox 和 Get-MailboxStatistics 的 Powershell 脚本缺少输出
- excel - 输入日期后,宏将运行
- java - Apache Timer 运行两次
- android - ScrollView 内的 ConstraintLayout
- python - Python / Pandas / Pulp 优化重复
- django - 显示通过管理员上传的图像
- matrix - Octave:将矩阵导出到文件
- linux - 是否有一种规范的编程方式来查询属于 NUMA 节点的核心集?
- android - 颤动中是否可以在同一行上有输入和跨度?