python - 熊猫中的时间增量矩阵(成对)
问题描述
我有两个熊猫系列:
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
是否有任何功能或唯一的选择是进行双循环?
解决方案
您可以将 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]]
推荐阅读
- python - 在同一个项目中使用 Fabric 2 和 Fabric 3
- ruby - Rspec 未通过测试,其中 'Diff:' 看起来相同
- vega-lite - 变通以显示基于周期时间列的 vega-lite 图表?
- google-data-studio - 使用 CASE WHEN 语句和聚合创建字段失败
- angular - 从 Angular 应用程序启动/停止 docker 的容器
- mongodb - 包含日期范围的最佳 Mongo 索引策略是什么
- django - 如何覆盖 Django 管理员/表单用于外键的查询集
- mysql - SQL 查询建议
- javascript - 如何编写使用异步函数和流的函数?
- spartacus-storefront - 接收页面模板的延迟加载模块