#pandas #dataframe
Вопрос:
Основываясь на предыдущих ответах, я не могу найти решение своей проблемы. Я кое-как добрался туда, но сейчас я просто немного застрял..
У меня есть два кадра данных:
df_master = pd.DataFrame({'Reference_Code':['19860', '20220'], 'Price_Now':[249.99, 149.99], 'Price_Was':['',159.99], 'In_Stock':['',''], 'Updated':['',''], }) df_master Reference_Code Price_Now Price_Was In Stock Updated 19860 249.99 20220 149.99 159.99 df_output = pd.DataFrame({'Reference_Code':['19860', '20220', '52458','12546'], 'Price_Now':[249.99, 149.99, 12.99, 19.99], 'Price_Was':['',159.99,'',''], 'Updated':['30/10/2021','','',''], }) df_output Reference_Code Price_Now Price_Was Updated 19860 259.99 30/10/2021 20220 149.99 159.99 52458 12.99 12546 19.99
Я хочу, чтобы результат в df_master был таким, как показано ниже (я буду добавлять новые записи отдельно).:
df_master Reference_Code Price_Now Price_Was Updated 19860 259.99 30/10/2021 20220 149.99 159.99
Шаги, которые, я думаю, мне нужны для достижения этой цели:
Шаг 1 Создайте новый фрейм данных под названием df_match, показывающий строки в df_master, которые соответствуют df_output на основе [‘Reference_Code’], используя следующий код
code1= list(df_master['Reference_Code']) df_match = df_output.loc[df_output['Reference_Code'].isin(code1)]
Шаг 2 Удалите строки, в df_match
которых значение df_match['Price_Now']
равно df_output['Price_Now']
. Это оставит фрейм данных только с теми значениями, в которых есть обновленное/другое значение df_output['Price_Now']
.
Шаг 3 Используйте оставшиеся элементы в df_match
качестве элементов для обновления df_master
, обновите значения, df_master['Price_Now']
используя значение из df_output['Price_Now']
Шаг 4 В то же время используйте оставшиеся элементы df_match
для обновления df_master['Updated']
с помощью переменной « todaysdate
Любые советы о моем подходе и о том, как этого добиться, будут оценены по достоинству.
Заранее спасибо.
Ответ №1:
Один из возможных подходов заключается в следующем:
df_master_redux = df_master.drop(['In_Stock'], axis = 1) df_ouput = pd.concat([df_master_redux, df_output]).reset_index() df_ouput = df_ouput.drop_duplicates() df_ouput = df_ouput.sort_values(['Reference_Code']).groupby('Reference_Code').tail(1).drop(['index'], axis=1)
который возвращает:
Reference_Code Price_Now Price_Was Updated 5 12546 19.99 2 19860 249.99 30/10/2021 1 20220 149.99 159.99 4 52458 12.99