dee*_*esh 3 python pivot date dataframe pandas
我正在计算员工的出勤率,这是示例表
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'
]
})
Run Code Online (Sandbox Code Playgroud)
我正在尝试从的Date
列中计算每天的In-Time和Out-Time df
。
此外,每天可能会有一次输入,可以视为“按时上班”。
In-Time将是第一个打入 ,而 Out-Time将是最后一个打入。
我期望输出这样的东西,或者可能是类似的东西
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
Run Code Online (Sandbox Code Playgroud)
有什么办法可以做到?
对于输出OfficePunch
列中的python对象日期,请使用first和last值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
Run Code Online (Sandbox Code Playgroud)
如果需要在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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
46 次 |
最近记录: |