У меня есть функция apply, которая просматривает список индексов, подключает его к модели scikit-learn KNN и возвращает два списка размером n (расстояния до соседей и индексы соседей). (Представьте, что это для системы рекомендаций mov ie.)
Я хочу добавить эти результаты в новый DF.
Пример: если моя функция выполняет итерацию по 3 индексам, а параметр n-neighbour равен 5, я должен получить DataFrame с 2 столбцами и длиной 3x5 = 15. Но в настоящее время мой сценарий добавляет весь список в одну строку, как показано ниже.
Это мой код. movies - это DF, который имеет входные индексы.
testDF = pd.DataFrame()
def get_distances_indices(index):
distances, indices = model_knn.kneighbors(data[index], n_neighbors=6)
distances = pd.Series(distances.flatten().tolist())
indices = pd.Series(indices.flatten().tolist())
return indices, distances
testDF[['index','distance']] = testDF.append(movies.apply(lambda row: get_distances_indices(row['index']), axis=1).apply(pd.Series),ignore_index=True)
Любая помощь приветствуется. Я новичок и видел статьи, в которых говорилось, что использование apply здесь поможет ускорить процесс получения списка соседей.
Для простоты вот воспроизводимый пример: я просто хочу, чтобы списки / серии были отображаются в вертикальном порядке, а не по горизонтали.
testDF = pd.DataFrame()
moviesData = {'movie': ['The Big Whale', 'Stack Underflow'], 'index': [3, 99]}
movies = pd.DataFrame(data=moviesData)
def get_distances_indices(index):
list1 = [51, 700, 999]
list2 = [.2, .3, .4]
df2 = pd.Series(list1)
df3 = pd.Series(list2)
return df2,df3
testDF[['index','distance']] = movies.apply(lambda row: get_distances_indices(row['index']), axis=1).apply(pd.Series)
testDF.head()