2016-05-17 8 views
0

Iは、2つのテーブル、一方はSCHEDULE_DATE(30万レコード)を含み、WORK_WEEK_CODEを有し、第二テーブルはWORK_WEEK_CODESTART_DATE、及びEND_DATEを含有します。最初の表にはスケジュールの日付が重複し、2番目の表には3,200個の一意の値があります。スケジュールの日付が入る範囲を基準にして、表2のWORK_WEEK_CODEに表2のWORK_WEEK_CODEを入力する必要があります。 2つのテーブルのサンプルは以下のとおりです。パイソン - 二番目の表において範囲内のテーブルから検索値

arcpy.da.UpdateCursorを入れ子にしたarcpy.da.SearchCursorを使用してタスクを実行することはできましたが、レコードのボリュームでは時間がかかります。より良い(そしてより少ない時間を費やす)方法に対する提案は非常に高く評価されるだろう。

:日付フィールドを文字列としてフォーマットされている

表1

SCHEDULE_DATE,WORK_WEEK_CODE 
20160219  
20160126  
20160219  
20160118  
20160221  
20160108  
20160129  
20160201  
20160214  
20160127 

表2

WORK_WEEK_CODE,START_DATE,END_DATE 
1601,20160104,20160110 
1602,20160111,20160117 
1603,20160118,20160124 
1604,20160125,20160131 
1605,20160201,20160207 
1606,20160208,20160214 
1607,20160215,20160221 

答えて

0

あなたは、より効率的な方法としてPandas dataframesを使用することができます。ここにパンダを使ったアプローチがあります。これが役立つことを願って:

import pandas as pd 

    # First you need to convert your data to Pandas Dataframe I read them from csv 
    Table1 = pd.read_csv('Table1.csv') 
    Table2 = pd.read_csv('Table2.csv') 

    # Then you need to add a shared key for join 
    Table1['key'] = 1 
    Table2['key'] = 1 

    #The following line joins the two tables 
    mergeddf = pd.merge(Table1,Table2,how='left',on='key') 

    #The following line converts the string dates to actual dates 
    mergeddf['SCHEDULE_DATE'] = pd.to_datetime(mergeddf['SCHEDULE_DATE'],format='%Y%m%d') 
    mergeddf['START_DATE'] = pd.to_datetime(mergeddf['START_DATE'],format='%Y%m%d') 
    mergeddf['END_DATE'] = pd.to_datetime(mergeddf['END_DATE'],format='%Y%m%d') 

    #The following line will filter and keep only lines that you need 
    result = mergeddf[(mergeddf['SCHEDULE_DATE'] >= mergeddf['START_DATE']) & (mergeddf['SCHEDULE_DATE'] <= mergeddf['END_DATE'])] 
関連する問題