Pandas 中按范围连接/合并的最佳方式
在数据分析中,通常需要基于以下条件来连接或合并数据框特定范围条件。一种方法是使用带有虚拟列的交叉连接,但这可能效率低下且复杂。更优雅、更高效的解决方案是利用 numpy 广播。
numpy 广播
Numpy 广播允许我们在不同形状的数组之间执行逐元素操作。这可以用来确定数据框中的哪些值满足指定的范围条件。
设置
考虑两个数据框:A 具有列 A_id 和 A_value,B 具有列 A_id 和 A_value列 B_id、B_low 和 B_high。我们想要连接 A 和 B,使得 A_value 介于 B_low 和 B_high 之间。
实现
<code class="python">import numpy as np # Convert dataframes to arrays a = A.A_value.values bh = B.B_high.values bl = B.B_low.values # Determine matching rows and columns i, j = np.where((a[:, None] >= bl) & (a[:, None] <= bh)) # Join corresponding rows from A and B joined = pd.concat([ A.loc[i, :].reset_index(drop=True), B.loc[j, :].reset_index(drop=True) ], axis=1) # Print joined dataframe print(joined)</code>
此方法利用逐元素比较和广播来有效识别并将 A 和 B 中满足范围条件的行连接起来。它既优雅又高效,避免了循环或虚拟列的需要。
以上是如何在 Pandas 中根据范围条件高效地连接 DataFrame?的详细内容。更多信息请关注PHP中文网其他相关文章!