我正在尝试合并两个构造如下的文件:
第一个文件是一个csv文件,其构造如下:
Hour Longitude Latitude
21:30 54.05 23
22:30 54.05 23
23:30 54.05 23
第二个文件表示如下:
Hour Longitude Latitude Meteo
21:30 54.05 23 20 degrees
22:30 106.05 67 -5 degrees
23:30 14.05 102 12 degrees
我想将第一个文件的值与第二个文件的值合并,仅匹配小时数,匹配经度和匹配的纬度。
Wich会给我这个档案:
Hour Longitude Latitude Meteo
21:30 54.05 23 20 degrees
22:30 54.05 23
23:30 54.05 23
正如您可以看到这些文件之间的小时,经度和纬度相匹配,因此新列Meteo将添加到第一个文件中。
答案 0 :(得分:0)
直接的方法是:
df1.merge(df2, how='left')
但创建地图(字典)可能会更快。也许你可以尝试使用你的数据集。
m = df2.set_index(['Hour','Longitude','Latitude'])['Meteo']
df1['meteo'] = [m.get(tuple(i), '') for i in df1.values]
import pandas as pd
data1 = '''\
Hour Longitude Latitude
21:30 54.05 23
22:30 54.05 23
23:30 54.05 23'''
data2 = '''\
Hour Longitude Latitude Meteo
21:30 54.05 23 20degrees
22:30 106.05 67 -5degrees
23:30 14.05 102 12degrees'''
df1 = pd.read_csv(pd.compat.StringIO(data1), sep='\s+')
df2 = pd.read_csv(pd.compat.StringIO(data2), sep='\s+')
%timeit df1.merge(df2, how='left').fillna('')
%timeit m = df2.set_index(['Hour','Longitude','Latitude'])['Meteo']; df1['meteo'] = [m.get(i,'') for i in zip(df1['Hour'],df1['Longitude'],df1['Latitude'])]
%timeit m = df2.set_index(['Hour','Longitude','Latitude'])['Meteo']; df1['meteo'] = [m.get(tuple(i), '') for i in df1.values]
返回
100 loops, best of 3: 3.69 ms per loop
100 loops, best of 3: 3.03 ms per loop
100 loops, best of 3: 2.99 ms per loop