Получение другого значения, отличного от нуля в кадре данных pandas, когда оно окружено другими значениями в определенном радиусе - PullRequest
1 голос
/ 12 октября 2019

В исследовании с большими наборами данных я создал набор данных с нулями (0) и единицами (1). Однако, когда значение 0 окружено 1 во всех направлениях, оно должно получить значение 2.

Я работаю в среде Spyder с Python 3.7. Ничего особенного. Я просто не могу понять код.

import pandas as pd

df = pd.read_excel (r'D:\AW 1920 VU\Research Project\Nieuwe map\Proberen.xlsx') #just an example excel sheet
print (df) 

df2= df.replace(range(1,20) , 1)
print (df2)''' 


df = 
[{0 0   0   0   0   0   0   0   0   0   0   0   0}
{0  0   0   0   0   0   0   0   0   0   0   0   0}
{0  0   0   0   0   0   0   0   0   0   0   0   0}
{0  0   0   0   0   1   0   0   0   0   0   0   0}
{0  0   0   1   11  2   1   1   0    0  0   0   0}
{0  0   0   7   13  1   0   0   0   0   0   0   0}
{0  0   0   2   2   7   0   2   1   0   0   0   0}
{0  0   0   3   5   8   8   2   1   0   0   0   0}
{0  0   0   1   6   7   0   0   1   1   0   0   0}
{0  0   0   1   1   0   0   0   2   0   0   0   0}
{0  0   0   1   1   1   1   0   3   4   0   0   0}
{0  0   0   0   0   1   1   1   2   0   0   0   0}
{0  0   0   0   0   0   1   1   1   0   0   0   0}
{0  0   0   0   0   0   0   0   0   0   0   0   0}
{0  0   0   0   0   0   0   0   0   0   0   0   0}
{0  0   0   0   0   0   0   0   0   0   0   0   0}]

df2=
[{0 0   0   0   0   0   0   0   0   0   0   0   0}
{0  0   0   0   0   0   0   0   0   0   0   0   0}
{0  0   0   0   0   0   0   0   0   0   0   0   0}
{0  0   0   0   0   1   0   0   0   0   0   0   0}
{0  0   0   1   1   1   1   1   0   0   0   0   0}
{0  0   0   1   1   1   0   0   0   0   0   0   0}
{0  0   0   1   1   1   0   1   1   0   0   0   0}
{0  0   0   1   1   1   1   1   1   0   0   0   0}
{0  0   0   1   1   1   0   0   1   1   0   0   0}
{0  0   0   1   1   0   0   0   1   0   0   0   0}
{0  0   0   1   1   1   1   0   1   1   0   0   0}
{0  0   0   0   0   1   1   1   1   0   0   0   0}
{0  0   0   0   0   0   1   1   1   0   0   0   0}
{0  0   0   0   0   0   0   0   0   0   0   0   0}
{0  0   0   0   0   0   0   0   0   0   0   0   0}
{0  0   0   0   0   0   0   0   0   0   0   0   0}]

Пока все хорошо. Но, как вы можете видеть, есть точка со значениями 0, окруженная единицами. Как я могу заблокировать / буферизовать / выделить эту область и присвоить ей «особое значение» (2). Таким образом, результат будет примерно таким:

df3=
[{0 0   0   0   0   0   0   0   0   0   0   0   0}
{0  0   0   0   0   0   0   0   0   0   0   0   0}
{0  0   0   0   0   0   0   0   0   0   0   0   0}
{0  0   0   0   0   1   0   0   0   0   0   0   0}
{0  0   0   1   1   1   1   1   0   0   0   0   0}
{0  0   0   1   1   1   0   0   0   0   0   0   0}
{0  0   0   1   1   1   0   1   1   0   0   0   0}
{0  0   0   1   1   1   1   1   1   0   0   0   0}
{0  0   0   1   1   1   2   2   1   1   0   0   0}
{0  0   0   1   1   2   2   2   1   0   0   0   0}
{0  0   0   1   1   1   1   2   1   1   0   0   0}
{0  0   0   0   0   1   1   1   1   0   0   0   0}
{0  0   0   0   0   0   1   1   1   0   0   0   0}
{0  0   0   0   0   0   0   0   0   0   0   0   0}
{0  0   0   0   0   0   0   0   0   0   0   0   0}
{0  0   0   0   0   0   0   0   0   0   0   0   0}]

Надеемся, что таблица читаема. С нетерпением жду ответов.

1 Ответ

0 голосов
/ 14 октября 2019

Используемый код:

import pandas as pd
import numpy as np 
from scipy import ndimage
#%%
df = np.array ([
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 1,11, 2, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 7,13, 1, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 2, 2, 7, 0, 2, 1, 0, 0, 0, 0],
    [0, 0, 0, 3, 5, 8, 8, 2, 1, 0, 0, 0, 0],
    [0, 0, 0, 1, 6, 7, 0, 0, 1, 1, 0, 0, 0],
    [0, 0, 0, 1, 1, 0, 0, 0, 2, 0, 0, 0, 0],
    [0, 0, 0, 1, 1, 1, 1, 0, 3, 4, 0, 0, 0],
    [0, 0, 0, 0, 0, 1, 1, 1, 2, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
df2 = np.where(df>=1, 2, df)
df3 = np.where(df2<1, 1, df2)
df4 = np.where(df3==2, 0, df3)

labeled_array, num_features = ndimage.label(df4, np.ones((3,3)))
labeled_array, num_features
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...