Сохранять строки только в том случае, если они содержат определенное значение - PullRequest
2 голосов
/ 19 июня 2020

У меня есть данные:

   item  colour machine
0   car     red       a
1   car     red       b
2   car   green       b
3   car    blue       a
4  moto  yellow       a
5  moto     red       a
6  bike    blue       a
7  bike    blue       b
8  bike   green       a

И я пытаюсь сохранить только те элементы, которые имеют запись на машине a и b. Я пробовал некоторые функции, которые нашел на inte rnet, но они не работают, поэтому мне пришлось сделать это с data.drop() вручную. Есть ли какая-то функция для этой работы? В результате dataframe должно получиться:

   item colour machine
0   car    red       a
1   car    red       b
2  bike   blue       a
3  bike   blue       b

Спасибо!

1 Ответ

1 голос
/ 19 июня 2020

Используйте GroupBy.transform с пользовательской лямбда-функцией для сравнения значений, преобразованных в tuple, list, а затем фильтруйте в boolean indexing:

Также при необходимости не уверен, всегда ли порядок a,b первая сортировка:

df = df.sort_values(['item','colour','machine'])

f = lambda x: tuple(x) == tuple(['a','b'])
#alternative
f = lambda x: list(x) == list(['a','b'])
#solution if want compare and remove duplicates
#f = lambda x: set(x) == set(['a','b'])
df = df[df.groupby(['item','colour'])['machine'].transform(f)]

print (df)
   item colour machine
0   car    red       a
1   car    red       b
6  bike   blue       a
7  bike   blue       b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...