2016-10-29 7 views
2

間マージPythonのパンダ - 私はPythonのパンダに2つのデータフレームを持っている状態

DATAFRAME 1私はデータフレーム1に地域にマッピングすることができますどのように

User_id zipcode 

1  12345 

2  23456 

3  34567 

DATAFRAME 2

ZipCodeLowerBound ZipCodeUpperBound Region 

10000    19999    1 

20000    29999    2 

30000    39999    3 

条件if(df1.zipcode>=df2.ZipCodeLowerBound and df1.zipcode<=df2.ZipCodeUpperBound)パンダを使用してマージ

答えて

0

これは、領域ごとに列を与え、各郵便番号その領域に属するかどうかのマスク:

df2 = df2.set_index('Region') 
mask = df2.apply(lambda r: df1.zipcode.between(r['ZipCodeLowerBound'], 
               r['ZipCodeUpperBound']), 
       axis=1).T 
mask 
Out[103]: 
Region  1  2  3 
0  True False False 
1  False True False 
2  False False True 

その後あなたはマスクとしてそれを適用するために、独自のカラム名に対して、その行列を使用して地域をバック見つけることができます:

mask.dot(mask.columns) 
Out[110]: 
0 1 
1 2 
2 3 
dtype: int64 
0
import pandas as pd 

df1 = pd.DataFrame({'User_id': [1,2,3], 
        'zipcode':[12345,23456,34567]}) 
df2 = pd.DataFrame({'ZipCodeLowerBound': [10000,20000,30000], 
        'ZipCodeUpperBound': [19999,29999,39999], 
        'Region': [1,2,3]}) 

region = [] 
for i in range(len(df1.zipcode)): 
    region.append(int(df2[(df2.ZipCodeLowerBound <= df1.zipcode[i]) & (df2.ZipCodeUpperBound >= df1.zipcode[i])]['Region'])) 
df1['Region'] = region 

print(df1) 

出力:

User_id zipcode Region 
0  1 12345  1 
1  2 23456  2 
2  3 34567  3 
関連する問題