Отслеживание изменений в группе по группе с временной задержкой - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть следующий фрейм данных, который указывает для каждого лица, к какому работодателю они были подключены, для каких проектов (и они могут быть подключены к нескольким работодателям для проекта).В столбце year указывается год (с которого цифра указывает порядок проектов в году (проект 20122 выполняется после проекта 20121))

Employee_id = [7102825752, 7102825752, 7102825752, 7102825752, 7102825752, 7102825752, 7102825752, 7102825752, 7102825752, 7102825752]
Project_id = [28253288, 28648301, 28800042, 29113983, 29126250, 29364924, 29678870, 29691896, 29691235, 29691235]
Employer_id = [60031437, 60031437, 60033114, 115272656, 110625857, 60031437, 60031437, 60031437, 61273455, 85972742]
Year = [20121, 20122, 20131, 20141, 20151, 20152, 20161, 20161, 20162, 20162]

import pandas as pd
data = pd.DataFrame({"Employee_id":Employee_id,"Project_id":Project_id,"Employer_id":Employer_id,"Year":Year})

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

enter image description here

1 Ответ

0 голосов
/ 04 декабря 2018

Я нашел решение своей проблемы, может быть, не очень, но оно работает

import pandas as pd
Employee_id = [7102825752, 7102825752, 7102825752, 7102825752, 7102825752, 
7102825752, 7102825752, 7102825752, 7102825752, 7102825752]
Project_id = [28253288, 28648301, 28800042, 29113983, 29126250, 29364924, 29678870, 29691896, 29691235, 29691235]
Employer_id = [60031437, 60031437, 60033114, 115272656, 110625857, 60031437, 60031437, 60031437, 61273455, 85972742]
Year = [20121, 20122, 20131, 20141, 20151, 20152, 20161, 20161, 20162, 20162]
data = pd.DataFrame({"employee":Employee_id,"project":Project_id,"employer":Employer_id,"year":Year})

employee_employer_change_df = pd.DataFrame({"employee":[0],"project":[0],"employer":[[0]]})
employee_employer_change_df['employer'] = employee_employer_change_df['employer'].astype(object)

for employee in set(data["employee"]):
    for project in data.loc[data['employee'] == employee]['project']:
        employer_list = data.loc[data.loc[data['employee'] == employee]['project']==project]["employer"].tolist()
        df=pd.DataFrame({"employee":[employee],"project":[project],"employer":[0]})
        df['employer'] = df['employer'].astype(object)
        df.at[0, "employer"] = employer_list
        employee_employer_change_df = employee_employer_change_df.append(df)
employee_employer_change_df = employee_employer_change_df.reset_index() 
employee_employer_change_df = employee_employer_change_df.drop(employee_employer_change_df.index[0])

employee_employer_change_df=employee_employer_change_df.drop_duplicates(["employee","project"],keep='first')
employee_employer_change_df['previous_employer'] = employee_employer_change_df.groupby(['employee'])['employer'].shift(1)


previous_employer=employee_employer_change_df['previous_employer'].tolist()
current_employer=employee_employer_change_df['employer'].tolist()

true=np.isnan(float('nan'))
new_employer_list = []
leaving_employer_list = []
for u in range(0,len(previous_employer)):
    nan_test=np.isnan(previous_employer[u])
    if nan_test is not true:
        new_employer_list.append(list(set(current_employer[u]) - set(previous_employer[u])))
        leaving_employer_list.append(list(set(previous_employer[u]) - set(current_employer[u])))
    else:
        new_employer_list.append(["first year"])
        leaving_employer_list.append(["first year"])

employee_employer_change_df['new_affiliation'] = new_employer_list     
employee_employer_change_df['leaving_affiliation'] = leaving_employer_list 
...