Python-匹配Excel中2个表的最接近值

时间:2018-07-26 18:52:53

标签: python excel

我有两个表,一个表包含风速数据,另一个表包含CO2数据。每个都有unix时间戳,但是所有时间都不完美匹配。我想根据最可能的时间配对数据。有没有办法使用python逻辑和/或熊猫来实现这一目标?

示例:

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

2 个答案:

答案 0 :(得分:0)

这是基本的排序和搜索(Knuth,第2卷)。 :-)

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

  1. 排序您的查找列表(风速)
  2. 遍历您的CO2列表。

对于每个CO2输入...

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

答案 1 :(得分:0)

您可以迭代风速,并为每个值找到差异最小的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提供的答案。排序和二进制搜索将为您提供更好的性能,但是如果列表的大小不超过运行时间,则可以忽略不计。