Задача: У меня есть 2 кадра данных df1
и df2
. Моя цель состоит в том, чтобы изменить df1
, заменив некоторые его значения, если они найдены в пределах df2
.Отображение значений в dataframe из другого фрейма данных в Pandas
import pandas as pd
# dataframe 1
data = {'A':[90,20,30,25,50,60],
'B':['qq','ee','rr','tt','ii','oo'],
'C':['XX','VV','BB','NN','KK','JJ']}
df1 = pd.DataFrame(data)
# dataframe 2
convert_table = {'X': ['dd','ee','ff','gg','hh','ii','ll','mm','nn','oo','pp','qq','rr','ss','tt','uu'],
'Y': ['DD','VV','FF','GG','HH','KK','LL','MM','NN','JJ','PP','XX','BB','SS','NN','LL'],
'Z': [5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61]}
df2 = pd.DataFrame(convert_table)
# search values of df1 inside of df2 and replace values
for idx1,row1 in df1.iterrows():
for idx2, row2 in df2.iterrows():
if row1['B']==row2['X'] and row1['C']==row2['Y']:
df1.replace(to_replace=row1['B'],value=row2['Z'],inplace=True)
Как вы можете видеть, у меня есть 2 для петель и проверить, если общий ряд df1
(row1
) находится внутри df2
. Если это условие выполнено, то я заменяю значение, содержащееся в строке1 ['B'], содержащееся в row2['Z']
Поэтому результаты, которые я получаю (именно то, что я хотел бы иметь в результате):
In [120]: df1
Out[120]:
A B C
0 90 43 XX
1 20 7 VV
2 30 47 BB
3 25 59 NN
4 50 19 KK
5 60 37 JJ
Обратите внимание, что столбец B изменен.
Вопрос: Вы могли бы предложить мне лучший способ написать мой код? Я хотел бы сделать это как можно быстрее, используя встроенные функции, предлагаемые Pandas или Python.
Примечание: данные, содержащиеся в dataframes, предназначены только для демонстрации.
Можно ли получить вывод с тем же числом столбцов, что и тот, который я получил в моем примере? –
Я только что сделал это, в то же время вы отправили свой комментарий :) –
Спасибо большое :) –