关于pandas:使用python中的列表值过滤匹配列值的数据帧

Filter dataframe matching column values with list values in python

本问题已经有最佳答案,请猛点这里访问。

我有一个DataFrame,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import numpy as np
import pandas as pd
import string
import random

random.seed(42)

df = pd.DataFrame({'col1': list(string.ascii_lowercase)[:11],
                   'col2':[random.randint(1,100) for x in range(11)]})

df

   col1 col2
0   a   64
1   b   3
2   c   28
3   d   23
4   e   74
5   f   68
6   g   90
7   h   9
8   i   43
9   j   3
10  k   22

我正在尝试基于筛选与值列表匹配的前一个数据帧的行来创建新的数据帧。我尝试了下一段代码:

1
df_filt = df[df['col1'] in ['a','c','h']]

但我得到了一个错误。我期待下一个结果:

1
2
3
4
5
6
df_filt

   col1 col2
0   a   64
1   c   28
2   h   9

我正在寻找一个灵活的解决方案,它允许根据匹配列表中比示例中显示的元素更多的元素进行过滤。


使用isin

1
df_filt = df[df.col1.isin(['a','c','h'])]

您可以使用pandas.Series.isin进行复合"in"检查。

输入数据帧:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> df
>>>
   col1  col2
0     a    64
1     b     3
2     c    28
3     d    23
4     e    74
5     f    68
6     g    90
7     h     9
8     i    43
9     j     3
10    k    22

输出数据帧:

1
2
3
4
5
6
>>> df[df['col1'].isin(['a', 'c', 'h'])]
>>>
  col1  col2
0    a    64
2    c    28
7    h     9