Pandas构建逐行比较矩阵

2024-04-24 11:52:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧,一个(10,2)和一个(4,2),我正在寻找一种更快/更具python风格的方法来逐行比较它们。在

x = pd.DataFrame([range(10),range(2,12)])
x = x.transpose()
y = pd.DataFrame([[5,8],[2,3],[5,5]])

我想构建一个比较矩阵(10,3),显示第一个数据帧中的哪一行符合第二个数据帧中的以下要求。x1值必须是>;=y[0]值,x[0]值必须是<;=y1值。实际上,数据是日期,但为了简单起见,我使用了整数使这个示例更易于理解。我们正在测试时间段中的重叠,因此逻辑显示在各个表的周期中肯定有一些重叠。在

^{pr2}$

enter image description here

上面的暴力方法太慢了。有什么建议,我可以矢量化这个或做一些转置矩阵比较?在


Tags: 数据方法ltgt示例dataframe风格range
1条回答
网友
1楼 · 发布于 2024-04-24 11:52:15

您可以将xy转换为NumPy数组,然后使用^{}扩展维度,这将在执行相同操作时引入^{}。因此,所有这些比较和输出布尔数组将以矢量化的方式创建。执行应该是这样的-

X = np.asarray(x) 
Y = np.asarray(y)
arr = (X[:,None,1] >= Y[:,0]) & (X[:,None,0] <= Y[:,1])

样本运行-

^{pr2}$

相关问题 更多 >