gpt4 book ai didi

python - 如何列出属于一组范围内的所有数字对?

转载 作者:太空狗 更新时间:2023-10-29 22:28:36 24 4
gpt4 key购买 nike

假设我有一个数据框 df1,其中包含两列 - A 和 B。A 的值表示较低范围,B 的值表示较高范围。

  A     B
10.5 20.5
30.5 40.5
50.5 60.5

我有另一个包含两列的数据框 - C 和 D 包含不同范围的数字。

  C     D
12.34 15.90
13.68 19.13
33.5 35.60
35.12 38.76
50.6 59.1

现在我想列出 df2 中属于 df1 组(在下限和上限之间)的所有对。

最终输出应该是这样的-

     Key                Values
(10.5, 20.5) [(12.34, 15.90), (13.68, 19.13)]
(30.5, 40.5) [(33.5, 35.60), (35.12, 38.76)]
(50.5, 60.5) [(50.6, 59.1)]

解决方案应该是有效的,因为我有 5000 组范围和来自不同范围的 85000 个数字。

最佳答案

它在我的电脑上并不快(约 30 秒),但如果您有多个内核,可以使用 multiprocessing 包轻松加速。

生成数据:

def get_fake(n):
df = pd.DataFrame(np.random.rand(n * 2).reshape(-1, 2))
df.loc[:, 1] += 1
return df

df1 = get_fake(200)
df2 = get_fake(90000)

然后是处理部分:

from collections import defaultdict
result = defaultdict(list)
for index, start, stop in df1.itertuples():
subdf = df2[(start < df2.iloc[:, 0]) & (df2.iloc[:, 1] < stop)]
result[(start, stop)] += subdf.values.tolist()

Result 是一个字典,但如果需要可以很容易地转换为 Series。

关于python - 如何列出属于一组范围内的所有数字对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50773556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com