问题说明
我有一个数据框,其中有两列'A'
和'B'
。我还有一个元组列表,其中元组的第一个元素是列'A'
中的元素,第二个元素是列'B'
中的元素。我想删除所有行的dataframe符合元组。
当然,我可以只使用循环,但我想要一个更聪明的解决方案,更快,更干净。
最小工作示例
import pandas as pd
df = pd.DataFrame(
{
'A': ['a', 'b', 'c', 'd', 'a', 'd', 'a', 'c'],
'B': [4, 2, 2, 1, 3, 4, 3, 2],
}
)
rows_to_remove = [('a', 4), ('c', 2), ('d', 4), ('a', 3)]
5条答案
按热度按时间sf6xfgos1#
我会使用 boolean indexing 和
pandas.Series.isin
:输出量:
wz3gfoph2#
您可以使用带有指示器的
merge
:输出量:
或者,与
drop
结合使用:输出量:
bvjxkvbb3#
如果您
import numpy as np
,您可以:它很有趣,但也很有用,因为我在google-colab上测试过,性能是
274 µs ± 11.6 µs
与@Timeless的解决方案中的1.44 ms ± 37.7µs
,我认为这是最好的,这是我一读到问题就想到的同一个。如果能看到更大的 Dataframe 之间的差异,那将是一件很有趣的事情。
hzbexzde4#
您可以从
rows_to_remove
创建一个嵌套框架,然后附加到原始嵌套框架并删除重复项:9nvpjoqh5#
希望这对你有帮助。你可以使用'df.drop'按索引删除行/列。请看下面提到的:
DataFrame.drop(labels=None,*,axis=0,index=None,columns=None,level=None,inplace=False,errors='raise')[https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop.html]