Python 2.7 如何将两列同时与python(pandas)中的两个不同数据帧进行比较?

Python 2.7 如何将两列同时与python(pandas)中的两个不同数据帧进行比较?,python-2.7,pandas,dataframe,Python 2.7,Pandas,Dataframe,df1包含两列Lat和Long,以及数千行。df2还包含两列lat和long,其中包含许多行。本质上,df2是一个参考位置列表,我想与df1进行比较。我想比较df1和df2的纬度和经度,以确定它们的位置是否匹配。i、 e my_data = pd.read_csv('/path/to/file', usecols = ['Lat','Lon']) reference_data = pd.read_csv('/path/to/file', usecols = ['Lat','Lon']) 简单地

df1包含两列Lat和Long,以及数千行。df2还包含两列lat和long,其中包含许多行。本质上,df2是一个参考位置列表,我想与df1进行比较。我想比较df1和df2的纬度和经度,以确定它们的位置是否匹配。i、 e

my_data = pd.read_csv('/path/to/file', usecols = ['Lat','Lon'])
reference_data = pd.read_csv('/path/to/file', usecols = ['Lat','Lon'])

简单地说,我想说,如果我的_数据中每一行的位置出现在reference_数据中,则将其标记为1,否则将其标记为0。由于该位置有两个组件Lat和Long,因此它们都需要在参考数据框中的任何位置彼此相邻。是否有简单的一行程序?

您可以通过使用合并函数将引用数据与带有指示符的my\u数据连接起来来生成该行程序

new_df = pd.merge(my_data, reference_data, on=['Lat','Lon'], how='left', indicator='flag')
您将得到一个看起来与my_数据完全相同的数据帧,但它包含一个新的列“flag”,该列显示“left_only”或“both”

要将其作为[0,1]标签获取,请执行以下操作:

new_df['bin_flag'] = (new_df['flag']=='both').astype(int)

据我所知,这一行没有实际的一行。

您也可以这样做:

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)