Python 执行活动所用的平均时间

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

我有一个专栏名为“执行活动所花费的时间”(例如:上楼)。如果第一次用了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']], 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分钟的时间,所以这就足够了。非常感谢。