gpt4 book ai didi

python - 在 python 中旋转数据

转载 作者:太空宇宙 更新时间:2023-11-03 13:06:36 26 4
gpt4 key购买 nike

我正在计算员工的出勤率,这是示例表

df = pd.DataFrame({
'E_ID': [1001, 1001, 1001, 1002, 1002, 1002, 1002],
'Date': [
'28-07-2019 08:27:00',
'28-07-2019 18:10:00',
'29-07-2019 08:10:00',
'28-07-2019 08:07:00',
'29-07-2019 08:10:10',
'29-07-2019 08:10:17',
'29-07-2019 17:50:00'
]
})

我正在尝试从 dfDate 列计算每天的 In-Time 和 Out-Time 。

也可以每天单次进入,这可以被视为打卡时间。

In-Time 将首先打入 AND超时将是最后一次打卡。

我期待这样的输出,或者类似的输出

E_ID    OfficePunch   In Punch           Out Punch
1001 28-08-2019 28-07-2019 08:27 28-07-2019 18:10
1001 29-08-2019 29-07-2019 08:10 29-07-2019 08:10
1002 28-08-2019 28-07-2019 08:07 28-07-2019 08:07
1002 29-08-2019 29-07-2019 08:10 29-07-2019 17:50

有什么办法可以做到吗?

最佳答案

对于输出 OfficePunch 列中的 python 对象日期,使用 Series.dt.date与聚合 GroupBy.agg第一个和最后一个值:

df['Date'] = pd.to_datetime(df['Date'])

df1 = (df.groupby(['E_ID', df['Date'].dt.date.rename('OfficePunch')])['Date']
.agg([('In Punch','first'),('Out Punch','last')])
.reset_index())
print (df1)
E_ID OfficePunch In Punch Out Punch
0 1001 2019-07-28 2019-07-28 08:27:00 2019-07-28 18:10:00
1 1001 2019-07-29 2019-07-29 08:10:00 2019-07-29 08:10:00
2 1002 2019-07-28 2019-07-28 08:07:00 2019-07-28 08:07:00
3 1002 2019-07-29 2019-07-29 08:10:10 2019-07-29 17:50:00

print (df1.dtypes)
E_ID int64
OfficePunch object
In Punch datetime64[ns]
Out Punch datetime64[ns]
dtype: object

如果需要在 OfficePunch 列中使用日期时间,请使用 Series.dt.floor :

df['Date'] = pd.to_datetime(df['Date'])

df1 = (df.groupby(['E_ID', df['Date'].dt.floor('d').rename('OfficePunch')])['Date']
.agg([('In Punch','first'),('Out Punch','last')])
.reset_index())
print (df1)
E_ID OfficePunch In Punch Out Punch
0 1001 2019-07-28 2019-07-28 08:27:00 2019-07-28 18:10:00
1 1001 2019-07-29 2019-07-29 08:10:00 2019-07-29 08:10:00
2 1002 2019-07-28 2019-07-28 08:07:00 2019-07-28 08:07:00
3 1002 2019-07-29 2019-07-29 08:10:10 2019-07-29 17:50:00

print (df1.dtypes)
E_ID int64
OfficePunch datetime64[ns]
In Punch datetime64[ns]
Out Punch datetime64[ns]
dtype: object

关于python - 在 python 中旋转数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57673256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com