Python(pandas)将多个日期时间快速映射到其系列索引?
我有一个大熊猫数据框,其中一列是已知时期(2013年)的(无序)日期时间。我需要一种有效的方法将这些日期时间转换为索引,其中每个索引=自开始时间(“2013-1-100”)起的小时数存在重复时间,应映射到重复索引。 显然,这可以通过使用timedelta一次一个循环来完成。也可以通过使用Pandas Series(参见以下代码段,该代码段生成自start_time以来所有日期时间的有序序列)通过循环完成此操作: 运行此代码段后,可以在循环中使用.index或.get_loc方法获取索引 **但是,有没有一种快速(非循环)的方法来获取任意日期时间列并找到它们各自的索引?** 例如,输入以下日期时间列:Python(pandas)将多个日期时间快速映射到其系列索引?,python,datetime,optimization,pandas,series,Python,Datetime,Optimization,Pandas,Series,我有一个大熊猫数据框,其中一列是已知时期(2013年)的(无序)日期时间。我需要一种有效的方法将这些日期时间转换为索引,其中每个索引=自开始时间(“2013-1-100”)起的小时数存在重复时间,应映射到重复索引。 显然,这可以通过使用timedelta一次一个循环来完成。也可以通过使用Pandas Series(参见以下代码段,该代码段生成自start_time以来所有日期时间的有序序列)通过循环完成此操作: 运行此代码段后,可以在循环中使用.index或.get_loc方法获取索引 **但是
all_indices = (df['mydatetimes'] - datetime(2013,1,1,0)) / np.timedelta64(1,'h')
2013-01-01 11:00:002013-01-01 11:00:00
2013-01-01 00:00:00
2013-12-30 18:00:00 应输出以下索引:[11,11,0,8730]使用:
和也很有用loc可以获取标签列表或数组进行查找:
>>> print time_series.loc[[pd.Timestamp('20130101 11:00'), pd.Timestamp('20130101 11:00'), pd.Timestamp('20130101'), pd.Timestamp('20131230 18:00')]]
2013-01-01 11:00:00 11
2013-01-01 11:00:00 11
2013-01-01 00:00:00 0
2013-12-30 18:00:00 8730
dtype: int64
谢谢你的回复。我有一个新的、更快的解决方案,它利用了pandas支持datetime和timedelta格式这一事实。事实证明,以下方法的速度大约是上述Colin解决方案的两倍(尽管没有那么灵活),并且避免了构建一系列有序日期时间的开销:
all_indices = (df['mydatetimes'] - datetime(2013,1,1,0)) / np.timedelta64(1,'h')
其中df是数据帧,“mydatetimes”是包含日期时间的列名
对代码计时会产生此解决方案执行30000个索引的结果:
0:00:00.009909-->此代码段
0:00:00.017800-->带有ts=系列(…)和ts.loc的科林溶液。我已从该计时中排除了构建序列的一次性开销此解决方案不会使重复的时间戳产生重复的索引。我有许多重复的时间戳,需要它们来生成重复的索引(因此索引输出的形状与datetimes输入的形状相同)。我更新了原始问题以反映这一点。不过,谢谢你的回答!这肯定比我的解决方案更接近!
all_indices = (df['mydatetimes'] - datetime(2013,1,1,0)) / np.timedelta64(1,'h')