【发布时间】:2020-07-08 00:01:25
【问题描述】:
考虑以下pd.DataFrame
import numpy as np
import pandas as pd
start_end = pd.DataFrame([[(0, 3), (4, 5), (6, 12)], [(7, 10), (11, 90), (91, 99)]])
values = np.random.rand(1, 99)
start_end 是一个pd.DataFrame,形状为(X, Y),其中每个值都是values 向量中(start_location, end_location) 的元组。另一种说法是,特定单元格中的值是不同长度的向量。
问题
如果我想找到pd.DataFrame 中每个单元格的向量值的平均值(例如),我该如何以经济高效的方式做到这一点?
我设法通过.apply 函数实现了这一点,但速度很慢。
我想我需要找到某种方法将其呈现在 numpy 数组中,然后将其映射回 2d 数据帧,但我不知道如何。
备注
- 起点与终点之间的距离可能不同,可能存在异常值。
- 单元格开始/结束始终与其他单元格不重叠(看看这个先决条件是否会影响求解速度会很有趣)。
广义问题
更一般地说,这是一个反复出现的问题,即如何制作 3d 数组,其中一个维度通过某些变换函数(均值、最小值等)与 2d 矩阵的长度不同
【问题讨论】:
-
你的数据有多大?
-
通常它大约是 10,000 x 100,000(
start_end),向量大约是10,000,000如果你认为 - 向量太小,这是因为start_end通常有负元组或 nan 值(即此单元格不包含values向量中的信息) -
start_end不应该是 (N,2) 形状的二维数组吗? -
对于
start_end中的每一行,单元格是否不重叠且按递增顺序排列? -
@Divakar 我更新了描述。也许
(N, 2)将是一个转换步骤后的状态,只要它可以映射回原始大小的二维矩阵。