我有一个带有以下列的Python数据框(出勤数据)
HashMap
对于给定的Tateate和Empcode,我想将Trn Time的第一次出现作为In Time,将TrnTime的最后一次出现作为Out时间。
如果密钥只有一个记录,那么时间应该在Out Time中。
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
上面的代码在Empcode和TranDate有2条记录的地方都可以使用。
如果只有一条记录,则无法使用。
答案 0 :(得分:1)
如果密钥只有一个记录,那么时间应该到了 时间
那么就这样吧。定义一个精确地做到这一点的函数并将其传递给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