首页 > 解决方案 > 熊猫中的时间增量矩阵(成对)

问题描述

我有两个熊猫系列:

A = pd.Series(['2020-01-01 00:10:00', '2020-01-01 02:20:00'], dtype=pd.datetime64)
B = pd.Series(['2020-01-01 00:00:00', '2020-01-01 02:30:00', '2020-01-01 03:00:00', dtype=pd.datetime64)

获取两个系列中每个日期时间之间的 timedeltas 绝对值(以分钟为单位)的矩阵(pandas DataFrame 或 numpy 2D 数组)的最快方法是什么?

结果应类似于此表:

10  | 140 | 170
140 |  10 |  40

是否有任何功能或唯一的选择是进行双循环?

标签: pythonpandasdatetimetimedelta

解决方案


您可以将 Series 转换为 numpy 数组,通过广播进行减法,将输出转换为绝对值,最后 2d 数组除以:

A = pd.Series(['2020-01-01 00:10:00', '2020-01-01 02:20:00'])
B = pd.Series(['2020-01-01 00:00:00', '2020-01-01 02:30:00', '2020-01-01 03:00:00'])
    
A = pd.to_datetime(A)
B = pd.to_datetime(B)
           
a = A.to_numpy()[:, None] - B.to_numpy()
a = np.abs(a) / (60 * 10 ** 9)
print (a)

[[ 10 140 170]
 [140  10  40]]       

推荐阅读