python - 当特定数量不在特定列中时如何删除数据框的行?

标签 python python-3.x pandas

我有两个包含四列和两列的数据框。例如:

   A  B  C   D
0  4  2 320 700
1  5  7 400 800
2  2  6 300 550
3  4  6 100 300
4  5  2 250 360

   A  B  
0  2  4 
1  5  7
2  2  5 

我需要比较第一个数据框和第二个数据框,看看第二个数据框中的 A 列和 B 列是否在第一个数据框中的 A 列和 B 列中。 (顺序无关紧要。这意味着在第一行的第一个数据框中,A 是 4,B 是 2,在第二个数据框中,A 是 2,B 是 4,这并不重要,但两个数字都应该在列)将整行保留在第一个数据框中;否则删除该行。所以输出将是:

   A  B  C   D
0  4  2 320 700
1  5  7 400 800
2  5  2 250 360

我怎样才能得到这个输出(我的实际数据帧非常大,无法遍历它们,所以需要一种快速高效的方法)?

最佳答案

我会通过首先排序,然后使用 merge 执行 LEFT OUTER JOIN 和一个指示器来确定要保留哪些行。例子,

u = df.loc[:, ['A', 'B']]
u.values.sort()     #  sort columns of `u` 
df2.values.sort()   #  sort columns of `df2`

df[u.merge(df2, how='left', indicator='ind').eval('ind == "both"').values]

   A  B    C    D
0  4  2  320  700
1  5  7  400  800
4  5  2  250  360

可以在我的帖子中找到有关使用指标连接的更多信息:Pandas Merging 101


如果您不关心最终结果是否排序,您可以将其简化为内部连接。

df[['A', 'B']] = np.sort(df[['A', 'B']])
df2[:] = np.sort(df2)

df.merge(df2, on=['A', 'B'])

   A  B    C    D
0  2  4  320  700
1  5  7  400  800
2  2  5  250  360

关于python - 当特定数量不在特定列中时如何删除数据框的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56511124/

相关文章:

Python 合并重复元素

python - 如何获得无限数据结构?

python - 在多个装饰器之间传递参数

python - 迭代列的条件以查找其他列值

python - 如何计算在数据框python中的特定值之前出现的次数?

python 32位 float 转换

python - 从 bash 脚本运行 Python 导致自定义模块导入错误

python - 如果这些字符串略有不同,如何根据另一个列表中的字符串从列表中删除某些字符串?更多信息如下

python - 按列分组统计不同的连续行

python - Pandas Series.ne 运算符针对同一系列的两个切片返回意外结果