Рассмотрим следующее df
data = {'Name' : ['John','John','Lucy','Lucy','Lucy'],
'Payroll' : [15,15,75,75,75],
'Week' : [1,2,1,2,3]}
df = pd.DataFrame(data)
Name Payroll Week
0 John 15 1
1 John 15 2
2 Lucy 75 1
3 Lucy 75 2
4 Lucy 75 3
То, что я пытаюсь сделать, это правда, применить логическое значение к всему DataFrame, очень похожему на этот, с 2m + строками и 20+ столбцами, чтобы узнать, когда кто-то начал
Чтобы узнать, активен ли кто-то или нет, я передаю условие другому df:
df2 = df.loc[df.Week == df.Week.max()]
Это дает мне последнюю неделю, после чего я использую фильтр isin, чтобы узнать, активен ли человек или ушел
df['Status'] = np.where(df['Payroll'].isin(df2['Payroll']), 'Active','Leaver')
Таким образом, используя приведенный выше код, я получаю следующее, что замечательно, что говорит мне, что, поскольку Джон не на последней неделе, он покинул компанию
Name Payroll Week Status
0 John 15 1 Leaver
1 John 15 2 Leaver
2 Lucy 75 1 Active
3 Lucy 75 2 Active
4 Lucy 75 3 Active
То, чего я пытаюсь добиться, это знать, когда Джон начал с нами, я мог бы попробовать маску для каждой недели года и проверить, когда они впервые появились, но я подумал, что должен быть более питонический способ. сделай это!
Желаемый вывод:
Name Payroll Week Status
0 John 15 1 Starter
1 John 15 2 Leaver
2 Lucy 75 1 Starter
3 Lucy 75 2 Active
4 Lucy 75 3 Active
Любая помощь очень ценится.
Редактировать для ясности:
data = {'Name' : ['John','John','John','John','Lucy','Lucy','Lucy','Lucy','Lucy'],
'Payroll' : [15,15,15,15,75,75,75,75,75],
'Week' : [1,2,3,4,1,2,3,4,5]}
df = pd.DataFrame(data)
желаемый вывод:
Name Payroll Week Status
0 John 15 1 Starter
1 John 15 2 Active
2 John 15 3 Active
3 John 15 4 Leaver
4 Lucy 75 1 Starter
5 Lucy 75 2 Active
6 Lucy 75 3 Active
7 Lucy 75 4 Active
8 Lucy 75 5 Active
что стоит отметить:
Максимальная неделя 5, поэтому любой, кто не на 5 неделе, является выпускником
первая неделя человека в df делает их стартером.
Все промежуточные недели установлены на Активные.