大熊猫:通过将数据框的两列与元组列表进行比较来获取行

时间:2020-03-17 10:14:22

标签: python pandas

说我有一个熊猫数据框,其中有四列:A,B,C,D。

my_df = pd.DataFrame({'A': [0,1,4,9], 'B': [1,7,5,7],'C':[1,1,1,1],'D':[2,2,2,2]})

我也有一个元组列表:

my_tuples = [(0,1),(4,5),(9,9)]

我只想保留(my_df['A'],my_df['B'])的值等于my_tuples中元组之一的数据帧的行。

在此示例中,该行将是第0行和第2行。

有没有很好的方法可以做到这一点?我将不胜感激。

2 个答案:

答案 0 :(得分:4)

DataFrame.merge与元组创建的DataFrame一起使用,on和{的DataFrames和{ {1}}:

A

或者:

B

答案 1 :(得分:1)

我们也可以将DataFrame.locmap一起使用。

my_df.loc[list(map(lambda x: x in my_tuples, zip(my_df['A'], my_df['B']))),:]

#my_df.loc[[row in my_tuples for row in zip(my_df['A'], my_df['B'])],:]

时间比较

%%timeit
my_df.loc[list(map(lambda x: x in my_tuples, zip(my_df['A'], my_df['B']))),:]
394 µs ± 24.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%%timeit
df = my_df.merge(pd.DataFrame(my_tuples, columns=['A','B']))
3.56 ms ± 248 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)


%%timeit
df = my_df[my_df.set_index(['A','B']).index.isin(my_tuples)]
3.99 ms ± 139 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
相关问题