时间计算,均值,中值,众数

问题描述

( 姓名 Gun_time 网络时间 节奏
约翰 28:48:00 28:47:00 4:38:00
乔治 29:11:00 29:10:00 4:42:00
迈克 29:38:00 29:37:00 4:46:00
莎拉 29:46:00 29:46:00 4:48:00
罗伊 30:31:00 30:30:00 4:55:00

第一季度。如何添加另一列说明 Gun_time 和 Net_time 之间的差异? Q2。我将如何计算 Gun_time 和 Net_time 的平均值。请帮忙!

我尝试过以下操作,但不起作用

df['Difference'] = df['Gun_time'] - df['Net_time']

对于平均值,我尝试了 df['Gun_time'].mean

但它也不起作用,请帮忙!

Q.3 如果我们有 28:48(分和秒)格式而不是 28:48:00 格式的时间,函数会给出值错误怎么办。

ValueError: 预期的 hh:mm:ss 格式

解决方法

将您的列转换为 dtype timedelta,例如喜欢

for col in ("Gun_time","Net_time","Pace"):
    df[col] = pd.to_timedelta(df[col])

现在您可以进行类似的计算

df['Gun_time'].mean()
# Timedelta('1 days 05:34:48')  

df['Difference'] = df['Gun_time'] - df['Net_time']

#df['Difference']
# 0   0 days 00:01:00
# 1   0 days 00:01:00
# 2   0 days 00:01:00
# 3   0 days 00:00:00
# 4   0 days 00:01:00
# Name: Difference,dtype: timedelta64[ns]

如果你需要更好的输出到字符串,你可以使用

def timedeltaToString(td):
    hours,remainder = divmod(td.total_seconds(),3600)
    minutes,seconds = divmod(remainder,60)
    return f"{int(hours):02d}:{int(minutes):02d}:{int(seconds):02d}"


df['diffString'] = df['Difference'].apply(timedeltaToString)

# df['diffString']
# 0    00:01:00
# 1    00:01:00
# 2    00:01:00
# 3    00:00:00
# 4    00:01:00
#Name: diffString,dtype: object

另见Format timedelta to string