前提・実現したいこと
pd.read_csv()で読み込んだ以下のようなデータに対して、つながっているものを一つとしてグルーピングが行いたいです。
(例)上のものを下もののように、縦横斜めでつながっているものを一つのグループとして各々に数字を当てて返したいです。
100010000000001
010100000000011
011000000000011
010000000000001
↓
200020000000003
020200000000033
022000000000033
020000000000003
発生している問題・エラーメッセージ
しかし、私が考えたアルゴリズムだと
200030000000004
030300000000044
033000000000044
030000000000004
のようにうまくグルーピングできないものになってしまします
該当のソースコード
python
def hedge_care_max(max_point,point):
if (point > max_point):
return max_point
else:
return point
def hedge_care_min(min_point,point):
if (point < min_point):
return min_point
else:
return point
reader = pd.read_csv()#自分のファイルから上の例のようなCSVを読み込んでいます
reader_numpy = reader.values
y_max_point = reader.shape[0]-1
x_max_point = reader.shape[1]-1
y_min_point = 0
x_min_point = 0
for x in range(0,reader.shape[1]):
for y in range(0,reader.shape[0]):
reader_numpy = reader.values
if reader.loc[y,x] == 0:
reader.loc[y,x] = 0
elif reader.loc[y,x] == 1: reader.loc[y,x] = np.amax(reader_numpy)+1 if(reader.loc[hedge_care_min(y_min_point,y-1),x] != 0): reader.loc[hedge_care_min(y_min_point,y-1),x] = reader.loc[y,x] if(reader.loc[hedge_care_min(y_min_point,y-1),hedge_care_max(x_max_point,x+1)] != 0): reader.loc[hedge_care_min(y_min_point,y-1),hedge_care_max(x_max_point,x+1)] = reader.loc[y,x] if(reader.loc[hedge_care_min(y_min_point,y-1),hedge_care_min(x_min_point,x-1)] != 0): reader.loc[hedge_care_min(y_min_point,y-1),hedge_care_min(x_min_point,x-1)] = reader.loc[y,x] if(reader.loc[y,hedge_care_max(x_max_point,x+1)] != 0): reader.loc[y,hedge_care_max(x_max_point,x+1)] = reader.loc[y,x] if(reader.loc[y,hedge_care_min(x_min_point,x-1)] != 0): reader.loc[y,hedge_care_min(x_min_point,x-1)] = reader.loc[y,x] if(reader.loc[hedge_care_max(y_max_point,y+1),x] != 0): reader.loc[hedge_care_max(y_max_point,y+1),x] = reader.loc[y,x] if(reader.loc[hedge_care_max(y_max_point,y+1),hedge_care_max(x_max_point,x+1)] != 0): reader.loc[hedge_care_max(y_max_point,y+1),hedge_care_max(x_max_point,x+1)] = reader.loc[y,x] if(reader.loc[hedge_care_max(y_max_point,y+1),hedge_care_min(x_min_point,x-1)] != 0): reader.loc[hedge_care_max(y_max_point,y+1),hedge_care_min(x_min_point,x-1)] = reader.loc[y,x] else: if(reader.loc[hedge_care_min(y_min_point,y-1),x] != 0): reader.loc[hedge_care_min(y_min_point,y-1),x] = reader.loc[y,x] if(reader.loc[hedge_care_min(y_min_point,y-1),hedge_care_max(x_max_point,x+1)] != 0): reader.loc[hedge_care_min(y_min_point,y-1),hedge_care_max(x_max_point,x+1)] = reader.loc[y,x] if(reader.loc[hedge_care_min(y_min_point,y-1),hedge_care_min(x_min_point,x-1)] != 0): reader.loc[hedge_care_min(y_min_point,y-1),hedge_care_min(x_min_point,x-1)] = reader.loc[y,x] if(reader.loc[y,hedge_care_max(x_max_point,x+1)] != 0): reader.loc[y,hedge_care_max(x_max_point,x+1)] = reader.loc[y,x] if(reader.loc[y,hedge_care_min(x_min_point,x-1)] != 0): reader.loc[y,hedge_care_min(x_min_point,x-1)] = reader.loc[y,x] if(reader.loc[hedge_care_max(y_max_point,y+1),x] != 0): reader.loc[hedge_care_max(y_max_point,y+1),x] = reader.loc[y,x] if(reader.loc[hedge_care_max(y_max_point,y+1),hedge_care_max(x_max_point,x+1)] != 0): reader.loc[hedge_care_max(y_max_point,y+1),hedge_care_max(x_max_point,x+1)] = reader.loc[y,x] if(reader.loc[hedge_care_max(y_max_point,y+1),hedge_care_min(x_min_point,x-1)] != 0): reader.loc[hedge_care_max(y_max_point,y+1),hedge_care_min(x_min_point,x-1)] = reader.loc[y,x]
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー