Отфильтровать значения столбца сопоставления фрейма данных со значениями списка в python

У меня такой DataFrame:

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

Я пытаюсь создать новый фрейм данных на основе фильтрации строк предыдущего фрейма данных, соответствующих списку значений. Я пробовал следующий фрагмент кода:

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

Но получаю ошибку. Ожидаю следующего результата:

df_filt

   col1 col2
0   a   64
1   c   28
2   h   9

Я ищу гибкое решение, которое позволяет фильтровать по большему количеству элементов списка соответствия, чем те, которые представлены в примере.

используйте isin для решения этой проблемы, df ['col1']. isin (['a', 'c', 'h'])

Mohamed Thasin ah 31.10.2018 12:12
6
1
19 097
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать pandas.Series.isin для составных "in" -чек.

Фреймворк входных данных:

>>> 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

Выходной кадр данных:

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

Используйте isin

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

Другие вопросы по теме