Python 执行活动所用的平均时间
我有一个专栏名为“执行活动所花费的时间”(例如:上楼)。如果第一次用了0:30秒,第二次用了1:10分钟,我想返回平均50秒的结果。 timeappeased是一个datetime列 输入:Python 执行活动所用的平均时间,python,pandas,datetime,Python,Pandas,Datetime,我有一个专栏名为“执行活动所花费的时间”(例如:上楼)。如果第一次用了0:30秒,第二次用了1:10分钟,我想返回平均50秒的结果。 timeappeased是一个datetime列 输入: df = pd.DataFrame([[1, '0:30'], [1, '1:10'], [2, '0:30']], columns=['Person Id', 'TimeElapsed']) 输出: df2 = pd.DataFrame([[1, '0:50'], [2, '0:30']], colum
df = pd.DataFrame([[1, '0:30'], [1, '1:10'], [2, '0:30']], columns=['Person Id', 'TimeElapsed'])
输出:
df2 = pd.DataFrame([[1, '0:50'], [2, '0:30']], columns=['Person Id', 'Average TimeElapsed'])
我试着用
df2['AverageTimeElapsed'] = df[TimeElapsed'].dt.total_seconds()
但这不起作用,因为它不是一个timedelta函数 这会将您的列转换为时间增量:
df["TimeElapsed"] = pd.to_timedelta("00:"+df["TimeElapsed"])
然后您可以执行总秒数()
。特别是,如果你寻找平均值,你可以简单地从以下方面得到:
df["TimeElapsed"].mean()
更新:
根据下面的注释,这是将MM:SS时间转换为秒的通用方法,只要MM和SS是正整数:
df["TimeElapsed"] = df["TimeElapsed"].apply(
lambda T: datetime.timedelta(seconds=
sum([x*y for x,y in zip([int(t) for t in T.split(":")], [60,1])])
)
)
然而,它有点不可读。但我相信,在进一步处理之前,您已经掌握了将字符串转换为number/timedelta的要点。这将把您的列转换为timedelta:
df["TimeElapsed"] = pd.to_timedelta("00:"+df["TimeElapsed"])
然后您可以执行总秒数()
。特别是,如果你寻找平均值,你可以简单地从以下方面得到:
df["TimeElapsed"].mean()
更新:
根据下面的注释,这是将MM:SS时间转换为秒的通用方法,只要MM和SS是正整数:
df["TimeElapsed"] = df["TimeElapsed"].apply(
lambda T: datetime.timedelta(seconds=
sum([x*y for x,y in zip([int(t) for t in T.split(":")], [60,1])])
)
)
然而,它有点不可读。但我相信您在进一步处理之前就可以将字符串转换为number/timedelta了。我想您的意思是将它们作为字符串,
'0:30'
?是的。对不起,我已经修好了。我想你是想把它们作为字符串,'0:30'
?是的。很抱歉,我已经修复了它。这会使主要部分正确,但很容易出错,例如,如果时间超过10分钟。相反,您可以尝试将timeappeased
格式化为df.timeappeased.str[-8:-6].str.zfill(2)+':'+df.timeappeased.str[-5:-3].str.zfill(2)+':'+df.timeappeased.str[-2:
,这解决了我的问题,谢谢。ALollz可能是对的,但在我的数据中,我没有超过10分钟的时间,我也不希望有超过10分钟的时间,所以这就足够了。谢谢。这会使主要部分正确,但容易出错,例如,如果时间超过10分钟。相反,您可以尝试将timeappeased
格式化为df.timeappeased.str[-8:-6].str.zfill(2)+':'+df.timeappeased.str[-5:-3].str.zfill(2)+':'+df.timeappeased.str[-2:
,这解决了我的问题,谢谢。ALollz可能是对的,但在我的数据中,我没有超过10分钟的时间,我也不希望有超过10分钟的时间,所以这就足够了。非常感谢。