применение функции if в массиве numpy и помещение результатов в другой массив - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть фрейм данных, который содержит 3 столбца и 100 строк, я конвертировал этот фрейм данных в массив numpy, потому что я хочу его как матрицу, этот массив имеет размеры (10,10,3), это означает, что это матрица (10 * 10), и каждый элемент внутри матрицы имеет 3 значения, я хочу применить функцию if в каждом элементе и заменить элемент результатом этой функции. Вот как выглядит фрейм данных:

      fromlinkno   vianodeno   tolinkno
   0      15           1           16
   1      16           1           15
   2      25           2           26   
   3      16           3           17
   ..     ..           ..          ..
   95     44           43          28
   96     28           35          29
   [100 rows * 3 columns]

  import pandas as pd 
  import numpy as np

  df2=df.iloc[:100]
  arr=df2.to_numpy()
  arr.reshape(10,10,3)


 The array(matrix) looks like:
 [[[15   1   16]
   [16   1   15]
   [25   2   26]
   [16   3   17]
   [17   3   16]
   [17   4   18]
   [18   4   17]
   [18   5   19]
   [19   5   18]
   [19   6   20]]

  [[19   6   34]
   ............
   ............]
   ............
   ...........
   [44   43  28]
   [28   35   29]]

Я хочу применить эту функцию, например: if (fromlinkno> tolinkno): if (tolinkno> vianodeno): return A elif (tolinkno vianodeno): return C elif (tolinkno return D

как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Вы можете получить свои выходные данные, используя numpy, где

Чтобы заново создать ваш фрейм данных, я использовал случайные значения:

df1 = pd.DataFrame(np.random.randint(1, 100, size=(100, 3)))

Изменение его формы в тот же размер, что и у вас:

array1 = df1.to_numpy()
array2 = array1.reshape(10, 10, 3)

Цикл по каждой матрице и использование вложенного numpy, где:

for a in range(len(array2)):
    print(np.where(array2[a][:, 0] > array2[a][:, 2],
                        np.where(array2[a][:, 2] > array2[a][:, 1], "A",
                                 np.where(array2[a][:, 2] == array2[a][:, 1], "C",
                                          np.where(array2[a][:, 2] < array2[a][:, 1], "D", np.nan))), np.nan))

Примечание: np.nan - просто заполнитель в качестве примера.

Выход:

['D' 'nan' 'nan' 'A' 'A' 'D' 'A' 'nan' 'nan' 'nan']
['nan' 'nan' 'nan' 'nan' 'nan' 'nan' 'nan' 'A' 'A' 'nan']
['nan' 'nan' 'D' 'A' 'D' 'D' 'A' 'C' 'A' 'nan']
['D' 'D' 'D' 'nan' 'A' 'D' 'C' 'D' 'nan' 'D']
['nan' 'D' 'nan' 'A' 'D' 'D' 'nan' 'D' 'nan' 'nan']
['D' 'nan' 'A' 'D' 'nan' 'nan' 'nan' 'nan' 'nan' 'nan']
['nan' 'nan' 'nan' 'nan' 'nan' 'nan' 'nan' 'A' 'A' 'D']
['D' 'nan' 'nan' 'A' 'nan' 'nan' 'nan' 'nan' 'nan' 'D']
['D' 'nan' 'D' 'D' 'nan' 'nan' 'nan' 'nan' 'nan' 'A']
['A' 'D' 'C' 'nan' 'D' 'A' 'nan' 'nan' 'D' 'A']

PS: Это просто распечатка примеров выходных данных. Вы можете создать новый массив тех же размеров, что и исходный массив, и продолжать заменять элементы там, где это необходимо.

0 голосов
/ 27 апреля 2020

функция, которую я написал, приведена в качестве примера, но цель состоит в том, чтобы получить другую матрицу, которая имеет буквы вместо этих элементов с 3 числами, поэтому она должна выглядеть (например)

        [[A [C  .......... 
          B  D            ..
          A  A
          D  E            ..
          C  A
          E  B            .. 
          A  A
          A  B            ..
          D  C
          B] A]           E]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...