Это не самое элегантное решение, но вы можете поиграть с этим или немного понять логику
import pandas as pd
df = pd.DataFrame({"date":["2018-01-01", "2018-01-10","2018-01-11",
"2018-01-15", "2018-02-25","2018-02-25",
"2018-02-05", "2018-02-15"],
"name":["a"]*5+["b"]+["c"]*2,
"status":['hired', "fired","hired", "fired",
"hired", "hired", "hired", "fired"]})
def fun(x):
x = x.sort_values("date")\
.reset_index(drop=True)
res =[None]*2
# this tell you the last status
res[0] = x["status"].iloc[-1]
# here we count days between any hired and fired
res[1] = x["date"].diff().dt.days.values[1::2].sum()
return(res)
df["date"] = df["date"].astype("M8[us]")
out = df.groupby("name").apply(lambda x: fun(x)).reset_index()
out[["status", "days"]] = out[0].apply(pd.Series)
del out[0]
out
name status days
0 a hired 13.0
1 b hired 0.0
2 c fired 10.0
Я рассмотрю добавление сегодняшней даты, если сотрудник все еще работает.