Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-匹配excel中两个表中最接近的值_Python_Excel - Fatal编程技术网

Python-匹配excel中两个表中最接近的值

Python-匹配excel中两个表中最接近的值,python,excel,Python,Excel,我有两个表格,一个是风速数据,另一个是二氧化碳数据。每个都有unix时间戳,但并非所有时间都完全匹配。我想根据最接近的时间对数据进行配对。有没有一种方法可以使用python逻辑和/或pandas实现这一点 例如: Time CO2 Time Wind 13982034 300 13984094 3.4 13985000 303 14034957

我有两个表格,一个是风速数据,另一个是二氧化碳数据。每个都有unix时间戳,但并非所有时间都完全匹配。我想根据最接近的时间对数据进行配对。有没有一种方法可以使用python逻辑和/或pandas实现这一点

例如:

Time      CO2                   Time         Wind
13982034  300                   13984094     3.4
13985000  303                   14034957     4.5
14029480  301
预期的结果是:

Time      CO2   Wind       
13982034  300   3.4               
13985000  303   3.4               
14029480  301   4.5

它是基本的排序和搜索(Knuth,第2卷)

这超越了任何特定的实现语言或包

  • 对查找列表进行排序(风速)
  • 反复浏览你的二氧化碳清单
  • 对于每个二氧化碳入口

    • 按时间戳搜索时间将插入列表的位置。如果是一个长列表(比如>100行),则使用二进制或插值搜索
    • 这将为您提供两个相邻的条目。一个简单的
      if
      语句将指示较近的一个
    • 从该条目中窃取风速,并将其添加到CO2表中的记录中

    您可以迭代风时间,并为每个值找到差异最小的CO2时间

    co2_times = [13982034, 13985000, 14029480]
    wind_times = [13984094, 14034957]
    
    for wt in wind_times:
         closestTime = min(co2_times, key=lambda c:abs(c-wt))
         print("Wind Time: " + str(wt) + "\nClosest CO2 Time: " + str(closestTime) + "\n")
    
    输出:

    Wind Time: 13984094
    Closest CO2 Time: 13985000
    
    Wind Time: 14034957
    Closest CO2 Time: 14029480
    

    请注意,如果运行时很重要,您应该查看@Prune提供的答案。排序和二进制搜索将为您提供更好的性能,但如果您的列表没有那么大,那么运行时间将可以忽略不计

    只是澄清一下;您是否总是尝试将风测量值与每个CO2测量值相匹配,即CO2比风测量值多?还有,您迄今为止尝试了什么-如果人们看到您尝试了什么代码以及哪里出了问题,他们将能够更好地帮助您。