Python:两个二维数组的交集

标签 python numpy

我的 .csv 文件中有名为“Max.csv”的数据:

Valid Date  MAX
1/1/1995    51
1/2/1995    45
1/3/1995    48
1/4/1995    45

另一个名为“Min.csv”的 csv 看起来像:

Valid Date  MIN
1/2/1995    33
1/4/1995    31
1/5/1995    30
1/6/1995    39

我想要两个生成两个字典或任何其他建议的数据结构,以便我可以在 python 中分别拥有两个单独的变量 Max 和 Min ,如下所示:

Valid Date  MAX
1/2/1995    45
1/4/1995    45

Valid Date  MIN
1/2/1995    33
1/4/1995    31

即从Max和Min中选择元素,只输出公共(public)元素。

我正在考虑使用 numpy.intersect1d,但这意味着我必须首先在日期列上分别比较最大值和最小值,找到常见日期的索引,然后获取最大值和最小值的第二列。这看起来太复杂了,我觉得有更聪明的方法来使两条曲线 Max 和 Min 相交。

最佳答案

你提到:

I have to separately compare the Max and Min first on date column, find the index of common dates and then grab the second columns for Max and Min. This appears too complicated...

事实上,这从根本上来说就是您需要做的,无论是哪种方式;但使用 numpy_indexed包(免责声明:我是它的作者),这一点也不复杂:

import numpy_indexed as npi
common_dates = npi.intersection(min_dates, max_dates)
print(max_values[npi.indices(max_dates, common_dates)])
print(min_values[npi.indices(min_dates, common_dates)])

请注意,此解决方案是完全矢量化的(不包含 python 级别的循环),因此必然比当前接受的答案快得多。

注2:这是假设日期列是唯一的;如果没有,您应该将 'npi.indices' 替换为 'npi.in_'

关于Python:两个二维数组的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37330150/

相关文章:

python - 比可悲的可用处理器更多的并行进程

python - Geopandas 导入错误 : The descartes package is required for plotting polygons in geopandas

python - Numpy:如何有效地获取每行的topN个元素?

python - 在 Python 中对二维数组进行部分 argsort

python - 向量化模糊图像的 Python 函数

python - 使用Python删除包含非ascii字符的单词

python - Python 开发人员如何管理 Javascript/CSS 库依赖项?

python - 计算距图像中心的像素距离

python - 如何在二维数组上加速 python curve_fit?

Python Click - 从配置文件提供参数和选项