作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设我有一个数据框 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/
我是一名优秀的程序员,十分优秀!