Как изменить порядок и добавить данные, содержащиеся в столбце df, в строки другого фрейма данных

#python #dataframe #jupyter-notebook

Вопрос:

У меня большие трудности с перемещением данных из фрейма данных в новый пустой.

Это мои дфс

df1:

введите описание изображения здесь

df2:

введите описание изображения здесь

Я хотел бы изменить значения df1 [«Закрыть»] в df2 [«Закрыть», «Закрыть 2», «Закрыть 3»,…, «Закрыть n»], поместив в одну строку, скажем, 20 значений «Закрыть» df1 (df1 20 первых строк), в одну строку df2, и перейдите ко второй строке df2, поместив следующие 20 строк df1(от 21 до 40). Это произойдет при игнорировании целевых столбцов обоих dfs, поэтому я попытался использовать эти параметры в качестве примера. Я стараюсь объяснить получше.. 5 (внутри диапазона цикла for) — это количество строк, в которых я хотел бы разместить первые 100 значений из df1 [«Закрыть»] в df2:

 for j in range (0, 5):

    count = 20;
    amazon_df_copy = 
amazon_df_copy.iloc[j:j 1,1:len(amazon_df_copy.columns)].append(normalized_amazon_df.iloc[:count,1:2]);
    count  = 20;
 

В результате получается следующее:

введите описание изображения здесь

Я пробовал даже разными способами, но мне удалось заполнить только один столбец, и в результате порядок моих столбцов меняется, и даже некоторые из них отсутствуют. Когда я закончу, я удалю оставшиеся значения NaN, в то время как целевые значения будут заполнены тем, которое соответствует 20 входам (закрытые столбцы, но сейчас это не важно).

Я надеюсь, что понятно, чего я хотел бы достичь, и я надеюсь, что вы сможете помочь. 🙁

Комментарии:

1. @ShivamRoy большое тебе спасибо!! Я хотел бы вставить целевые значения таким образом из df1 в df2: df1[‘Цель][1] —> df2[‘Цель’][1] df1[‘Цель][21] —>> df2[‘Цель’][2] df1[‘Цель][41] —>>> df2[‘Цель’][3] и так далее..

2. Привет @Александр Гечев, я бы попросил вас прокомментировать мой ответ, так как я не получаю никаких уведомлений, когда вы комментируете свой собственный вопрос. А что касается Target ценностей, мне действительно жаль, но я не уверен, что все еще понимаю это. Вы хотите, чтобы Target строки были похожи на Close строки? Или вам нужны только 1-е, 21-е, 41-е и так далее значения?

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

Ответ №1:

Вы можете достичь этого, выполнив транспонирование каждых 20 столбцов с помощью аналогичного преобразования:

 new_df = pd.DataFrame(df1.Close.values.reshape(-1, 20), 
                columns= ['Close']   ['Close'   str(i) for i in range(1,20)])
 

Если я правильно понял требование к Target столбцу в вашем комментарии, вы хотите сохранить каждое 20-е значение, включая значение 1-й строки в Target столбце df1, в new_df, который вы можете использовать iloc для того же:

 new_df['Target'] = df1.iloc[::20].tolist()
 

Комментарии:

1. да, ваше предположение было правильным, я пытался использовать ваш код, но я получаю эту ошибку: Ошибка значения: не удается преобразовать массив размером 12246 в форму (20). Я пытаюсь решить проблему, недооценивая форму и синтакс, к сожалению, я не уверен в python, но если я не найду решения, я напишу вам ответ. А пока спасибо вам за вашу доброту!

2. @AlexanderGechev Я расскажу вам причину, потому что , когда вы используете reshape(-1, 20) , это означает, что мы хотим преобразовать наш фрейм данных в 2D-массив с количеством столбцов 20, а количество строк выводится методом деления значения 12246 в вашем случае на 20. Поскольку 12246 не кратно 20, вы получите эту ошибку. Вам придется либо добавить 14 фиктивных строк, либо удалить 6 строк, чтобы сделать их кратными 20.

3. Я сделал это! new_df_targets = pd.DataFrame(columns = ['Target']); new_df_targets['Target'] = normalized_amazon_df['Target'].iloc[::39]; new_df_close = pd.DataFrame(normalized_amazon_df['Close'].values.reshape(-1, 39), columns= ['Close'] ['Close' str(i) for i in range(1,39)]).reset_index(drop=True); new_df = pd.concat((new_df_targets, new_df_close), axis=1); Для тестов, которые я хотел сделать, этого достаточно, но в конечном итоге хорошо подумать о создании манекенов. Большое вам спасибо за ваше терпение, несмотря на мой плохой английский, вы были очень добры ко мне

4. @AlexanderGechev Вообще никаких проблем. Я действительно рад, что мой ответ мог бы вам помочь. И, пожалуйста, перестаньте беспокоиться о своем английском, он достаточно хорош. 🙂 Я был бы очень признателен, если бы вы могли отметить ответ как «Принято», если это вам помогло. Спасибо 🙂