Фильтрация значений на основе значений столбцов для других - PullRequest
0 голосов
/ 10 октября 2018

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

import pandas as pd
newd = {'year': [2001, 2002, 2005, 2002, 2004, 2001, 2001, 2002, 2003, 2003, 2002, 2002, 2003, 2004, 2005, 2003, 2004, 2005, 2004, 2004 ],
 'indviduals': [12, 23, 24, 28,30, 15, 17, 18, 18, 19, 12, 15, 12, 12, 12, 15, 15, 15, 12, 12],
 'employers': ['a', 'b', 'c', 'd', 'e', 'a', 'a', 'b', 'b', 'c', 'b', 'a', 'c', 'd', 'e', 'a', 'a', 'a', 'a', 'b'] }


newdf=newdf=pd.DataFrame(newd)

Мой ожидаемый результат (только пример):

2001, a: [12, 15, 17] count:3  employerchanged: []
2002, b: [12, 23, 28] count:3  employerchanged: [12] 
2002, a: [15]         count:1

Это легко сделать в SQL.Но SQL не скажет мне способа, если отдельные «12» сменили работодателя в период с 2001 по 2002 год.

Это то, что я до сих пор пробовал в python:

dic={}

listofUniqueYears= [i for i in newdf.year.unique()]

# даетя список уникальных лет

dic={}

for i in listofUniqueYears:
   dic[i]=defaultdict(dict)

    print(dic)

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

1 Ответ

0 голосов
/ 21 октября 2018

Вы можете подать заявку по группам, чтобы получить уникальное количество работодателей на сотрудника в год.

df = newdf.groupby(['year','indviduals']).agg({'employers':'nunique'}).reset_index()
df[df.year == 2004]

Вы также можете применять дополнительные агрегации, если вам нужна сумма подсчетов в зависимости от того, что вам нужно.

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