Панды: объединить два кадра данных в специальном порядке - PullRequest
0 голосов
/ 22 января 2019

Я проверил все остальные ответы, я не смог найти то, что искал.

У меня есть фрейм данных df1:

0 A B
1 a good
2 b bad
3 c fair

и фрейм данных df2:

0 C D
1 a a
2 a b
3 b c
4 a d

Я хочу, чтобы результат был:

0 C B1   D B2
1 a good a good
2 a good b bad
3 b bad  c fair
4 a good d ---

Скажем, df1 играет роль «словаря», мне нужно извлечь соответствующие значения B для элементов A.Обратите внимание, что, поскольку элемент d не определен в df1, соответствующее значение равно «---» в df2.

Кажется таким простым, но не может заставить его работать.Спасибо за все советы.

1 Ответ

0 голосов
/ 22 января 2019

Использование s.map()

d=dict(zip(df1.A,df1.B))

df2['B1']=df2.C.map(d).fillna('---')
df2['B2']=df2.D.map(d).fillna('---')

df2=df2[['C','B1','D','B2']]

print(df2)


   C    B1  D    B2
0  a  good  a  good
1  a  good  b   bad
2  b   bad  c  fair
3  a  good  d   ---

Для создания динамического отображения, если в df2 больше столбцов:

my_list=[]
for i in df2.columns:
    my_list.append(df2[i].map(d).fillna('---'))
df_new=df2.join(pd.concat(my_list,axis=1),lsuffix='',rsuffix='_mapped')
print(df_new)

   C  D C_mapped D_mapped
0  a  a     good     good
1  a  b     good      bad
2  b  c      bad     fair
3  a  d     good      ---
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...