我在.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中选择元素,以便只输出公共元素。
我正在考虑使用numpy.intersect1d,但这意味着我必须分别比较日期列中的Max和Min,查找常用日期的索引,然后获取Max和Min的第二列。这似乎太复杂了,我觉得有更聪明的方法来交叉两条曲线Max和Min。
答案 0 :(得分:2)
你提到:
我必须分别比较日期列上的Max和Min, 找到常用日期的索引,然后获取第二列 最大和最小。这看起来太复杂了......
事实上,这基本上是你需要做的事情,无论如何;但是使用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.in _'
替换'npi.indices'答案 1 :(得分:1)
set()
内置必须足够如下:
>>> max = {"1/1/1995":"51", "1/2/1995":"45", "1/3/1995":"48", "1/4/1995":"45"}
>>> min = {"1/2/1995":"33", "1/4/1995":"31", "1/5/1995":"30", "1/6/1995":"39"}
>>> a = set(max)
>>> b = set(min)
>>> {x:max[x] for x in a.intersection(b)}
{'1/4/1995': '45', '1/2/1995': '45'}
>>> {x:min[x] for x in a.intersection(b)}
{'1/2/1995': '33', '1/4/1995': '31'}