Как перебрать несколько массивов numpy и добавить элемент из одного массива в другой с тем же идентификатором? - PullRequest
0 голосов
/ 10 мая 2018

Что, если у меня есть следующие данные, test_df['review_id'], которые содержат идентификатор кадра данных. Мне нужно связать каждый из них с данными из других массивов. Я собираюсь иметь код, подобный следующему.

def classify_nb_report(X_train_vectorized, y_train, X_test_vectorized, y_test):
    clf = MultinomialNB()

    # TRAIN THE CLASSIFIER WITH AVAILABLE TRAINING DATA
    clf.fit(X_train_vectorized, y_train)

    y_pred_class = clf.predict(X_test_vectorized)

    return y_pred_class

for i in range(0, n_loop):
    train_df, test_df = train_test_split(df, test_size=0.3)
    ....
    nb_y = classify_nb_report(X_train_vectorized, y_train, X_test_vectorized, y_test)

Как вы можете видеть выше, на каждой итерации я собираюсь получить новый набор nb_y, который является массивом numpy. Я также собираюсь иметь различные наборы test_df и train_df (которые случайным образом выбираются с помощью функции выше). Я хочу связать каждое значение nb_y из каждой итерации с id, которое соответствует test_df['review_id'].

С помощью следующего кода я могу получить идентификатор test_df рядом со значением из nb_y.

for f, b in zip(test_df['review_id'], nb_y):
    print(f, b)

Результат:

17377 5.0
18505 5.0
24825 1.0
16032 5.0
23721 1.0
18008 5.0

Теперь я хочу, чтобы из приведенного выше результата я добавил значения nb_y из следующих итераций к соответствующим им идентификаторам.

Надеюсь, это не слишком запутанно, я постараюсь расширить, если мой вопрос недостаточно ясен. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Обращаясь к , и , , я наконец-то нашел свое собственное решение.Я превратил приведенный выше код во что-то вроде этого.

def classify_nb_report(X_train_vectorized, y_train, X_test_vectorized, y_test):
    clf = MultinomialNB()

    # TRAIN THE CLASSIFIER WITH AVAILABLE TRAINING DATA
    clf.fit(X_train_vectorized, y_train)

    y_pred_class = clf.predict(X_test_vectorized)

    return y_pred_class


nb_y_list = []

for i in range(0, n_loop):
    train_df, test_df = train_test_split(df, test_size=0.3)
    ....
    nb_y = classify_nb_report(X_train_vectorized, y_train, X_test_vectorized, y_test)

    nb_y_list.extend([list(x) for x in zip(test_df['review_id'],nb_y)])

dd = defaultdict(list)
for key, val in nb_y_list:
     dd[key].append(val)
     print(dd)

По сути, сначала я создал пустой список с именем nb_y_list.Затем для каждой итерации I zip идентификатор из test_df['review_id'] должен быть параллельным со значением из nb_y, и расширять их до предыдущего nb_y_list.После того, как все циклы закончены, я получу полный список, который мне теперь нужно будет преобразовать в словарь, используя defaultdict().

0 голосов
/ 10 мая 2018

Я не уверен, правильно ли я понимаю проблему и как работает остальная часть вашего кода, но я предполагаю, что следующий код может сделать то, что вам нужно.Дайте мне знать, если это работает или что-то не так с ответом.

dictionary = {}
for i in range(0, n_loop):
    train_df, test_df = train_test_split(df, test_size=0.3)
    ....
    nb_y = classify_nb_report(X_train_vectorized, y_train, X_test_vectorized, y_test)
    id = test_df['review_id']
    if not id in dictionary.keys():
        dictionary[id] = [nb_y]
    else:
        dictionary[id].append(nb_y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...