2017-07-26 16 views
1

df1にはLatとLongの2つの列と数千の行が含まれています。 df2にはlatとlongの2つの列と多くの行が含まれています。基本的に、df2はdf1と比較したい参照場所のリストです。私はdf1の緯度と経度の両方をdf2と比較して、その位置が一致していると言い、そうでないと言いたいと思います。すなわち、Python(pandas)の2つの異なるデータフレームに対して2つの列を同時に比較するにはどうすればよいですか?

シンプルな言葉で
my_data = pd.read_csv('/path/to/file', usecols = ['Lat','Lon']) 
reference_data = pd.read_csv('/path/to/file', usecols = ['Lat','Lon']) 

、私は、この場所は、緯度とロングの2つのコンポーネントがありますので、それを0にラベルを付ける他、my_dataの各行内の位置がreference_data中に存在する場合、1それを標識することを言いたいですどちらも参照データフレーム内のどこにでも存在する必要があります。簡単な1ライナーはありますか?

答えて

1

これを生成するには、merge関数を使用して、reference_dataをmy_dataにインジケータで結合します。

new_df = pd.merge(my_data, reference_data, on=['Lat','Lon'], how='left', indicator='flag') 

あなたは正確にmy_dataのように見えるが、「left_only」または「両方」と言うのいずれかの新しいコラム「フラグ」を含むべきデータフレームを取得します。 [0,1]ラベルとしてそれを得るために

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

私の知る限りでは、実際のワンライナーは、このいずれかにありません。

+0

ありがとうございました!これはうまくいった。 – Niveta

0

あなたも何か行うことができます。

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) 
関連する問題