#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 Вообще никаких проблем. Я действительно рад, что мой ответ мог бы вам помочь. И, пожалуйста, перестаньте беспокоиться о своем английском, он достаточно хорош. 🙂 Я был бы очень признателен, если бы вы могли отметить ответ как «Принято», если это вам помогло. Спасибо 🙂