Допустим, у меня есть два оригинальных DataFrame вроде:
df1 = pd.DataFrame({"ID": [101, 102, 103], "Price":[12, 33, 44], "something":[12,22,11]})
df2 = pd.DataFrame({"ID": [101, 103], "Price":[122, 133]})
И это отображается как:
ID Price something
0 101 12 12
1 102 33 22
2 103 44 11
И
ID Price
0 101 122
1 103 133
С тех пор я не устанавливаю никаких индексов для любого столбца, поэтому я хочу знать, как я могу обновить df1
, если оба DataFrame имеют одинаковый ID
. Надеюсь, что для этого примера я смогу получить такой результат:
ID Price something
0 101 122 12
1 102 33 22
2 103 133 11
Вы можете видеть, я забочусь только о ценовой колонке. Что я пробовал сейчас:
pd.concat([df1,df2]).drop_duplicates(['ID'],keep='last')
Но это просто показывает мне:
ID Price something
1 102 33 22.0
0 101 122 NaN
1 103 133 NaN
Я не хочу, чтобы изменялись значения других столбцов.
Я бы хотел сохранить порядок строк df1
.
UPDATE
После запуска кода ответа, и я продолжаю пробовать больше, и я нахожу, что порядок столбцов изменится, так как мы используем reset_index
, что-то с индексом. поэтому я надеюсь, что кто-то может указать мне, как сохранить исходную позицию моего DataFrame. На данный момент это выглядит так:
In [180]: df1 = pd.DataFrame({"ss":[12,22,11], "ID": [101, 102, 103], "Price":[12, 33, 44], "something":[12,22,11]})
...: df2 = pd.DataFrame({"ID": [101, 103], "Price":[122, 133]})
In [181]: df1.set_index('ID',inplace=True)
...: df1.update(df2.set_index('ID'))
...: df1.reset_index(inplace=True)
In [182]: df1
Out[182]:
ID ss Price something
0 101 12 122.0 12
1 102 22 33.0 22
2 103 11 133.0 11