IIUC,你可以用
divmod
将除法和余数乘以60,并用
pandas.concat
:
s1,s2 = df['minutes'].divmod(60)
(pd
.concat([df,
# select rows where hour is multiple of 60
# and matching hour is not already the previous hour
# decrement hour
df[s1.ne(df['hour']-1)&s2.eq(0)].eval('hour = hour-1')
])
.groupby('hour')
.agg({'hour': 'first', 'minutes': 'count'})
)
或者,如果你已经知道小时和分钟是匹配的,只使用
mod
:
mask = df['minutes'].mod(60).eq(0)
(pd
.concat([df,
df[mask].eval('hour = hour-1')
])
.groupby('hour')
.agg({'hour': 'first', 'minutes': 'count'})
)
输出:
hour minutes
hour
12 12 3
13 13 4