Получить первый и последний вхождение строки в группе Python
У меня есть Python Dataframe со следующими столбцами (данные посещаемости)
Empcode T01 T01 T02 T03 T04
TranDate 10/09/2018 10/09/2018 10/09/2018 10/09/2018 10/09/2018
Trn Time 09.29 17.54 13.52 10.01 18.01
Я хочу получить первое вхождение Trn Time как In Time и последнее вхождение TrnTime как Out time для данного Trandate и Empcode.
если для ключа есть только одна запись, время должно прийти в Out Time.
g=df.groupby(['Empcode','TrnDate'])
print (pd.DataFrame({'In':g.TrnTime.nth(0),'out':g.TrnTime.nth(-1)}))
Приведенный выше код работает везде, где есть 2 записи для Empcode и TranDate.
Если есть одна запись, она не работает.
1 ответ
Решение
если для ключа есть только одна запись, время должно прийти в Out Time
Тогда пусть будет так. Определите функцию, которая делает именно это, и передайте ее GroupBy.apply
:
def fnc(g):
res = {'Out': g.iat[-1]}
if len(g) > 1:
res['In'] = g.iat[0]
return res
dfres = df.groupby(['Empcode','TranDate'])['Trn Time'].apply(fnc).unstack()
print(dfres)
In Out
Empcode TranDate
T01 10/09/2018 09.29 17.54
T02 10/09/2018 NaN 13.52
T03 10/09/2018 NaN 10.01
T04 10/09/2018 NaN 18.01