df1包含两列Lat和Long,以及几千行。 df2还包含两列lat和long,有许多行。基本上,df2是我想要与df1进行比较的参考位置列表。我想将df1的纬度和经度与df2进行比较,以表明它们的位置匹配,或者说它们不相同。即,
my_data = pd.read_csv('/path/to/file', usecols = ['Lat','Lon'])
reference_data = pd.read_csv('/path/to/file', usecols = ['Lat','Lon'])
简单来说,我想说如果my_data中每一行的位置都存在于reference_data中,则将其标记为1,否则将其标记为0.由于此位置有两个组件Lat和Long,因此它们必须存在在参考数据帧中的任何位置彼此相邻。有一个简单的单行吗?
答案 0 :(得分:1)
你可以通过使用merge函数将reference_data与my_data连接到一个指示符来生成它。
new_df = pd.merge(my_data, reference_data, on=['Lat','Lon'], how='left', indicator='flag')
您将获得一个与my_data完全相同的数据框,但包含一个新列" flag"要么说" left_only"或者"两个"。
将其作为[0,1]标签:
new_df['bin_flag'] = (new_df['flag']=='both').astype(int)
据我所知,这个没有实际的单行。
答案 1 :(得分:1)
你也可以这样做:
my_data.apply(lambda x: (x['Lat'] in reference_data['Lat'] and x['Lon'] in reference_data['Lon']) * 1.0, axis=1)
然后你可以随意分配它。
或者,以同样的方式,但也许更容易看到正在发生的事情:
my_data.apply(lambda x: ((x['Lat'], x['Lon']) in zip(reference_data['Lat'], reference_data['Lon'])) * 1.0, axis=1)