Фильтр Pandas Dataframe по 2 пунктам - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть следующий фрейм данных панд -

 1. A     John
 2. A     Juliet
 3. A     Joseph
 4. A     Romeo
 5. A     Chris
 6. A     John
 7. A     Juliet
 8. A     Joseph
 9. A     Romeo
 10. A     Chris
 11. A     John
 12. B     Juliet
 13. B     Joseph
 14. B     Romeo
 15. B     Chris
 16. B     John
 17. C     Juliet
 18. C     Joseph
 19. C     Romeo

Мне нужно отфильтровать с двумя условиями:

  1. , где у сотрудников (имен) 3 по И И
  2. Если A имеет счет 8, B имеет счет 4, C имеет счет 3
My logic filters for each employee being there 3 times --

unique_employee=df.loc[:,"Employee"].unique().tolist()

count=0
for i in unique_employee:
    if count==0:
        df2=df1[df1['Employee']==i].iloc[0:3,:]
        count+=1
    else:
        df2=pd.concat([df2,df1[df1['Employee']==i].iloc[0:3,:]])

How do i put in the second part of my condition too?

Мой ожидаемый результат будет, когда компания A будет иметь 8 экземпляров, компанияУ Б было бы 4 экземпляра, а у компании С было бы 3 экземпляра, и учитель был бы там трижды -

A    John
A    John
B    John
A    Joseph
A    Joseph
C    Joseph
A    Chris
A    Chris
B    Chris
A    Juliet
B    Juliet
C    Juliet
A    Romeo
B    Romeo
C    Romeo

1 Ответ

0 голосов
/ 01 ноября 2019

Имя столбца, в котором хранятся «A», «B», «C», в приведенном ниже коде называется «abc».

Каждый эпизод представляет собой группу, указанную в столбце «сотрудник». Использование counter вернет объект counter (аналог словаря), показывающий, сколько у сотрудника abc.

Затем сравнивает счетчик с условием_дикта (которое установлено заранее). Если он удовлетворяет требованию, он будет добавлен в список вывода.

from collections import Counter
employees=df.groupby("Employee")
condition_dic = {'A': 8, 'B':4, 'C':3}

output = []
for ep in employees:
    if len(ep[1]) == 3:
        output.append(ep[1])
    else:
        cnt = Counter(ep[1]['abc'])
        if cnt == condition_dic:
            output.append(ep[1])

output = pd.concat(output)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...