Панды: групповой фильтр value_count по частоте и подкатегории - PullRequest
0 голосов
/ 03 июля 2018

У меня есть такой фрейм данных в Пандах:

Session Rating
A       Positive
A       Positive
A       Positive
A       Negative
B       Negative
B       Negative
C       Positive

Используя counts = df.groupby('Session')['Rating'].value_counts(), я получаю объект Series следующим образом:

Session Rating
A       Positive  3
        Negative  1
B       Negative  2
C       Positive  1

Я хочу выполнить фильтрацию по двум критериям:
1) фильтр по частоте, так что где счет> 1
2) фильтр по рейтингу == 'Позитивный'

Я нашел эту ветку для 1), но я не уверен, как это сделать 2), поскольку это Сериал, и я не могу получить поле Рейтинги. Ожидаемый результат будет A Positive 3

Наконец, я хочу замаскировать свой исходный кадр данных, чтобы исключить все эти строки, удовлетворяющие этим двум условиям. Помощь будет принята с благодарностью, спасибо!

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Вот один из способов, используя groupby.size, затем query:

res = df.groupby(['Session', 'Rating']).size().reset_index(name='Count')\
        .query('(Rating == "Positive") & (Count > 1)')

print(res)

  Session    Rating  Count
1       A  Positive      3
0 голосов
/ 03 июля 2018

Вы можете использовать эту комбинацию, сначала отфильтруйте фрейм данных, где Ratings == 'positive', затем groupby и value_counts, чтобы получить серию, наконец, используйте .loc с лямбда-функцией, чтобы создать логическое значение для выбора только частей серия больше 1.

df[df.Rating == 'Positive'].groupby('Session')['Rating'].value_counts().loc[lambda x: x>1]

Выход:

Session  Rating  
A        Positive    3
Name: Rating, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...