Tranformations из Numpy Array, передать значения для функции - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь взять массив numpy и передать его в задачу ограничения.

Таблица, с которой я работаю, находится ниже -

Type1   2   3   4   5   6
A   0   1   1   0   1   1
B   0   1   1   0   1   1
C   0   0   1   1   1   1
D   0   0   1   1   1   1
E   1   1   1   1   0   1
F   1   1   1   1   1   1

Когда я преобразую таблицу вмассив, я пытаюсь сделать две вещи:

1) Добавить еще 6 столбцов (будет заголовки 7, 8, 9, 10, 11 и 12). Новые столбцы будут иметь одинаковые значения столбцов 1-6 для каждого типа (A, B, C и т. Д.)

2) Для каждого типа я пытаюсь передать значения вметод ограничения. Так, например, я хотел бы передать (x, y), где x - это тип ("a"), а y - столбцы, где значение = 1. Другими словами, первым (x, y) будет ("a"). , [2, 3, 5, 6, 8, 9, 11, 12])

(для шага # 1 может не быть необходимости создавать столбцы 7-12, если бы у меня была возможность просто добавить 6к существующим столбцам «истинных» значений 1–6)

Я пытался использовать nditer, но я не уверен, как удерживать «Тип» в nditer, выполнить булеву проверку значения и затем передатьимя столбца? Я думал, что даже не буду использовать имя столбца, а просто использую счетчик для определения переменной y.

1 Ответ

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

Вы можете сделать это, используя apply и tile, как показано ниже. Функция np.tile повторяет массив с логическим индексом

df = pd.DataFrame([['A', 0, 1, 1, 0, 1, 1], ['B', 0, 1, 1, 0, 1, 1], ['C', 0, 0, 1, 1, 1, 1], ['D', 0, 0, 1, 1, 1, 1], ['E', 1, 1, 1, 1, 0, 1], ['F', 1, 1, 1, 1, 1, 1]], columns=('Type', '1', '2', '3', '4', '5', '6'))

def constraint(x, y):
    print("x: ", x)
    print("y: ", y)
    return x

df.apply(lambda row: constraint(row[0], np.arange(2*len(row[1:]))[np.tile((row[1:]==1),2)]+1), axis=1)

ИЛИ используя цикл, подобный приведенному ниже

for i in range(len(df)):
    row=df.iloc[i]
    constraint(row[0], np.arange(2*len(row[1:]))[np.tile((row[1:]==1),2)]+1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...