python - 获取python groupby中字符串的第一次和最后一次出现
问题描述
我有一个带有以下列的python数据框(出勤数据)
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
对于给定的 Trandate 和 Empcode,我想将 Trn Time 的第一次出现作为 In Time 并将 TrnTime 的最后一次出现作为 Out 时间。
如果键只有一条记录,则时间应输入 Out Time。
g=df.groupby(['Empcode','TrnDate'])
print (pd.DataFrame({'In':g.TrnTime.nth(0),'out':g.TrnTime.nth(-1)}))
上面的代码适用于有 2 条记录的 Empcode 和 TranDate。
如果只有一条记录,它就不起作用。
解决方案
如果键只有一条记录,则时间应输入 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
推荐阅读
- excel - Excel VBA 中的批量打印作为一项作业
- crashlytics - 如何清除/删除 firebase Crashlytics 自定义键?
- ansible - JSON 操作 - 过滤器和行内联
- javascript - 我的续集关联有困难
- c++ - 直接设置Singleton Class的成员变量是否有效?
- google-apps-script - 在 gsheet 中的特定列和行上添加时间戳并冻结
- reactjs - 如何在 React 构建中使用环境变量?
- ruby - 无法在 MacOS M1 上安装自制软件
- git - Git rebase 链 master->featureA->featureB。master 发生了一些变化,为什么要再次 rebase featureB?
- matlab - 如何在 Matlab 中重新缩放 STL 曲面