У меня есть dataframe df_in
вот так:Отображение значения индекса от одного dataframe к другому в панд
import pandas as pd
import numpy as np
dic_in = {'A':['A1','A1','A1','L3','A3','A3','B1','B1','B1','B2','A2'],
'B':['xxx','ttt','qqq','nnn','lll','nnn','eee','xxx','qqq','bbb','sss'],
'C':['fas','efe','pfo','scs','grj','rpo','cbb','asf','asc','wq3','mls']}
df_in = pd.DataFrame(dic_in)
У меня также есть еще один dataframe, который называется df_map
:
dic_map = {'X':['A1' ,'A1' ,'A1' ,'A2' ,'A3' ,'B1' ,'B1' ,'B1' ,'B1' ,'B2' ,'B3' ,'B3' ,'L1', 'L3' ,'L3'],
'Y':['qqq','ttt','xxx','sss','lll','eee','qqq','xxx','zzz','bbb','mmm','ooo','kkk','nnn','ttt']}
df_map = pd.DataFrame(dic_map)
Моя цель заключается в изучать каждый row[['A','B']]
от df_in
; если пара элементов идентифицирована в пределах df_map
, тогда я извлекаю значение соответствующего индекса, и я устанавливаю его в другой столбец в первом фрейме данных.
Ex: пара A1 - xxx
находится на карте в 0
; поэтому я поставлю 0
рядом с парой A1 - xxx
. Если пара не найдена, я поместил NaN
.
Результат должен выглядеть следующим образом:
Idx A B C
0 2 A1 xxx fas
1 1 A1 ttt efe
2 0 A1 qqq pfo
3 13 L3 nnn scs
4 4 A3 lll grj
5 NaN A3 nnn rpo
6 5 B1 eee cbb
7 7 B1 xxx asf
8 6 B1 qqq asc
9 9 B2 bbb wq3
10 3 A2 sss mls
Можете ли вы предложить мне умный и эффективный способ для достижения своей цели?
Вы избили меня до него, я придумал 'df_in.merge (df_map.reset_index(). Set_index (['X', 'Y']), left_on = ['A', 'B'], right_index = True, how = 'left') ' –
Что делать, если я хочу переместить индекс на 1 во время операции таким образом, что значения отображаемых индексов все +1? –
Сдвиг индекса, вы имеете в виду после слияния, 'df ['index'] + = 1'? –