Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python(pandas)将多个日期时间快速映射到其系列索引?_Python_Datetime_Optimization_Pandas_Series - Fatal编程技术网

Python(pandas)将多个日期时间快速映射到其系列索引?

Python(pandas)将多个日期时间快速映射到其系列索引?,python,datetime,optimization,pandas,series,Python,Datetime,Optimization,Pandas,Series,我有一个大熊猫数据框,其中一列是已知时期(2013年)的(无序)日期时间。我需要一种有效的方法将这些日期时间转换为索引,其中每个索引=自开始时间(“2013-1-100”)起的小时数存在重复时间,应映射到重复索引。 显然,这可以通过使用timedelta一次一个循环来完成。也可以通过使用Pandas Series(参见以下代码段,该代码段生成自start_time以来所有日期时间的有序序列)通过循环完成此操作: 运行此代码段后,可以在循环中使用.index或.get_loc方法获取索引 **但是

我有一个大熊猫数据框,其中一列是已知时期(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:00
2013-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')