Python Pandas 按日为员工工作记录生成序号的实现问题
实现步骤
- 先将
job_time字段转换为pandas可识别的datetime类型,方便后续提取日期和时间排序 - 按「员工+工作日期」分组,对分组内的记录按
job_time升序排序后生成从1开始的序列,就是所需的当日工作次数索引
示例代码
import pandas as pd # 假设你的原始数据存放在df变量中 # 1. 转换时间格式,注意示例中的日期格式为日/月/年,format参数对应调整 df['job_time'] = pd.to_datetime(df['job_time'], format='%d/%m/%y %H:%M') # 2. 生成nth_job字段,cumcount默认从0开始计数,加1后从1开始 df['nth_job'] = df.sort_values('job_time').groupby( ['employee', df['job_time'].dt.date] ).cumcount() + 1
如果需要保留原始DataFrame的行顺序,不因为排序打乱原有记录位置,可以用下面的写法:
import pandas as pd df['original_idx'] = df.index df['job_time'] = pd.to_datetime(df['job_time'], format='%d/%m/%y %H:%M') df = df.sort_values('job_time') df['nth_job'] = df.groupby(['employee', df['job_time'].dt.date]).cumcount() + 1 df = df.sort_values('original_idx').drop('original_idx', axis=1)
执行后得到的df就包含你需要的nth_job字段,输出结果和你给出的示例完全一致。
内容的提问来源于stack exchange,提问作者bevloy
相关产品推荐
相关产品推荐

