フィーチャクラス内のグループに基づいてフィールドを自動インクリメントしますか?


10

フィーチャクラス内のグループに基づいてフィールドを自動インクリメントする必要があります。特定のポリゴン内に8つのプロットがあり、各ポリゴン内のプロットのセットごとに1〜8のIDを割り当てる必要があります。ポリゴンには、プロットをグループ化するために使用される独自のID番号があります。

私はそれがこれの変更になると思います:

rec=0
def autoIncrement():
 global rec
 pStart = 1 
 pInterval = 1 
 if (rec == 0): 
  rec = pStart 
 else: 
  rec = rec + pInterval 
 return rec

1
おそらく、Pythonのの剰余演算子(の使用上に読んでもらいたい%
ヴィンス

回答:


12

Python用フィールド計算機

d={}
def GroupOrder(groupID):
  if groupID in d: d[groupID]+=1
  else: d[groupID]=1
  return d[groupID]

---------------------------

GroupOrder( !locality! )

地域を変更してください!関連分野へ。

更新:この表現のバリエーション:

d={}
def GroupOrder(groupID):
  N=d.get(groupID,0);N+=1
  d[groupID]=N
  return N

大規模なデータセットではるかに速く動作するはずです。


GroupOrder機能は、スタンドアロンPythonスクリプトで使用された場合は、GroupOrder関数は次のようになりcode block、引数とGroupOrder( !locality! )「式」引数になります。
user3467260

スクリプトでは、次のとおりです。a)辞書を作成します。b)2つのフィールドグループのカーソルを更新し、1つを設定します。3〜5行のコード。
FelixIP

1
arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON_9.3", codeblock)スタンドアロンスクリプトで使用する場合、これらの引数がarcpyフィールド計算ツールに含まれることをコメントで言及するのを怠りました。スタンドアロンスクリプトでコードを使用する別のアプローチの手順を説明していただきありがとうございます。
user3467260

すべて良い。とにかく、私はカーソルがフィールド電卓よりもはるかに速いという印象を受けています。
FelixIP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.