如何根据元组列表过滤 Pandas DataFrame?

R_a*_*efg 4 python tuples filter dataframe pandas

如何从一组元组中过滤数据帧,以便配对相同?我需要一种更优雅的写作方式。我尽量不使用合并,因为它会降低效率。

所以我有一个名为 tup_list 的元组列表: [('118', '35'), ('35', '35'), ('118', '202') 假设每个元组中的第一个元素是 A,第二个是 B,我试图根据这个 tup_list 过滤我的数据帧,其中配对需要相同。

原始数据框:

A   B
118 35
118 40
35  202
118 1
35  35
Run Code Online (Sandbox Code Playgroud)

根据tup_list过滤后,新的dataframe应该是:

A   B
118 35
35  35
Run Code Online (Sandbox Code Playgroud)

只应返回精确的配对。

目前我正在使用 df= df.merge(tup_list, on=['A','B'], how='inner'). But is not very efficient as my actual data is larger.

请建议更有效的写作方式。

Chr*_*ris 5

使用布尔索引:

tup_list = [(118, 35), (35, 35), (118, 202)]
df[pd.Series(list(zip(df['A'], df['B']))).isin(tup_list)]

    A   B
0   118 35
4   35  35
Run Code Online (Sandbox Code Playgroud)

list(zip(df['A'], df['B'])) 把你的两列变成一个元组列表:

[(118, 35), (118, 40), (35, 202), (118, 1), (35, 35)]
Run Code Online (Sandbox Code Playgroud)

你正在变成一个系列并isin用来返回一个布尔值:

0     True
1    False
2    False
3    False
4     True
dtype: bool
Run Code Online (Sandbox Code Playgroud)

可用于布尔索引