如何在python(pandas)中将两个列一次与两个不同的数据帧进行比较?

时间:2017-07-26 22:28:26

标签: python-2.7 pandas dataframe

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,因此它们必须存在在参考数据帧中的任何位置彼此相邻。有一个简单的单行吗?

2 个答案:

答案 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)