我有一列名为“执行活动所需的时间”(例如:上楼梯)。如果是第一次花了我0:30秒,第二次花了我10:10分钟,我想返回平均50秒的结果。 TimeElapsed是日期时间列
输入:
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函数。
答案 0 :(得分:3)
这会将您的列转换为时间增量:
df["TimeElapsed"] = pd.to_timedelta("00:"+df["TimeElapsed"])
,然后您可以执行total_seconds()
。特别是,如果您要寻找平均值,则可以简单地从以下位置获得它:
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])])
)
)
但是,这有点难以理解。但我相信您可以在进一步处理之前将字符串转换为数字/时间增量。