我相信我的问题非常简单,并且必须有一个非常简单的方法来解决这个问题,但是因为我对Python很新,所以我无法解决它。我看到了一些类似的问题,但没有一个真正与我所面临的问题有关。
我有一个数据帧,其中时间由"Timestamp"列设置,格式为YYYY-MM-DD HH:MM:SS。我的目标是在整个秒内绘制此列,因此将所有此Datatime转换为从索引0开始到最后一个索引的秒数。基本上,我的第一个元素和最后一个元素之间的差异应该以秒为单位显示,我希望以秒为单位的计数从“Timestamp”列的第一个element(0s)开始。最后,我将它绘制为我的x和速度,我的情况自然比我在这里发布的场景更复杂,因为我正在将外部文件加载到dataframe中,并且它们可能会以不同的间隔显示时间戳。
Timestamp Category ... Status Speed
0 2017-07-23 22:00:00 1 ... 1 1
1 2017-07-23 22:00:01 1 ... 1 1
2 2017-07-23 22:00:02 1 ... 1 1.1
3 2017-07-23 22:00:03 1 ... 1 1.2
4 2017-07-23 22:00:04 1 ... 1 1.2
5 2017-07-23 22:00:05 1 ... 1 1.2
6 2017-07-23 22:00:06 1 ... 1 1.2
7 2017-07-23 22:00:07 1 ... 1 1.2
8 2017-07-23 22:00:08 1 ... 1 1.2
35999 2017-07-23 22:59:59 0 ... 1 2.3
希望我能够简洁明了。我真的很感谢你对这个的帮助!
分析解答
使用Timedeltas通过Series.sub
减去第一个值并通过Series.dt.total_seconds
转换为秒:
df['td'] = df['Timestamp'].sub(df['Timestamp'].iat[0]).dt.total_seconds()
如果有所有秒,那么从0
到DataFrame的长度范围。
所以相同的输出是:
df['td'] = range(len(df))
要么:
df['td'] = df.index
如果需要秒:
df['td'] = pd.to_timedelta(df['Timestamp'].dt.strftime(%H:%M:%S)).dt.total_seconds()