верный! Спасибо :)

от вопрос уже есть ответ здесь:

Панды Слияния 101 1 ответ

у меня есть датафрейм

id  store    address
1    100        xyz
2    200        qwe
3    300        asd
4    400        zxc
5    500        bnm

у меня есть другой датафрейм df2

serialNo    store_code  warehouse
    1          300         Land
    2          500         Sea
    3          100         Land
    4          200         Sea
    5          400         Land

Я хочу, чтобы мой окончательный кадр данных выглядел так:

id  store    address  warehouse
1    100        xyz     Land
2    200        qwe     Sea
3    300        asd     Land
4    400        zxc     Land
5    500        bnm     Sea

то есть сопоставление одного фрейма данных с другим, создание нового столбца

Ответы на вопрос(2)

Решение Вопроса
df.merge
out = (df1.merge(df2, left_on='store', right_on='store_code')
          .reindex(columns=['id', 'store', 'address', 'warehouse']))
print(out)

   id  store address warehouse
0   1    100     xyz      Land
1   2    200     qwe       Sea
2   3    300     asd      Land
3   4    400     zxc      Land
4   5    500     bnm       Sea
pd.concat + df.sort_values
u = df1.sort_values('store')
v = df2.sort_values('store_code')[['warehouse']].reset_index(drop=1)
out = pd.concat([u, v], 1)

print(out)

   id  store address warehouse
0   1    100     xyz      Land
1   2    200     qwe       Sea
2   3    300     asd      Land
3   4    400     zxc      Land
4   5    500     bnm       Sea

если ваш фрейм данных уже отсортированstore, в этом случае вы можете удалить его.

df.replace/df.map
s = df1.store.replace(df2.set_index('store_code')['warehouse'])
print(s) 
0    Land
1     Sea
2    Land
3    Land
4     Sea

df1['warehouse'] = s
print(df1)

   id  store address warehouse
0   1    100     xyz      Land
1   2    200     qwe       Sea
2   3    300     asd      Land
3   4    400     zxc      Land
4   5    500     bnm       Sea

Или создайте отображение явно. Это работает, если вы хотите использовать его позже.

mapping = dict(df2[['store_code', 'warehouse']].values)
df1['warehouse'] = df1.store.map(mapping)
print(df1)

   id  store address warehouse
0   1    100     xyz      Land
1   2    200     qwe       Sea
2   3    300     asd      Land
3   4    400     zxc      Land
4   5    500     bnm       Sea

использованиеmap или жеjoin:

df1['warehouse'] = df1['store'].map(df2.set_index('store_code')['warehouse'])
print (df1)
   id  store address warehouse
0   1    100     xyz      Land
1   2    200     qwe       Sea
2   3    300     asd      Land
3   4    400     zxc      Land
4   5    500     bnm       Sea
df1 = df1.join(df2.set_index('store_code'), on=['store']).drop('serialNo', 1)
print (df1)
   id  store address warehouse
0   1    100     xyz      Land
1   2    200     qwe       Sea
2   3    300     asd      Land
3   4    400     zxc      Land
4   5    500     bnm       Sea
 Shubham05 сент. 2017 г., 11:14
верный! Спасибо :)
 Shubham05 сент. 2017 г., 11:01
я получаю эту ошибку при запуске кода .map в аналогичном наборе данных.Reindexing only valid with uniquely valued Index objects
 jezrael05 сент. 2017 г., 11:05
Я думаю, что есть проблема, у вас есть дубликаты вstore_code вdf2, так нужноdf1['store'].map(df2.drop_duplicates('store_code').set_index('store_code')['warehouse'])

Ваш ответ на вопрос