Почему я не могу объединить два фрейма данных в столбце, содержащем несколько не похожих записей - PullRequest
0 голосов
/ 12 июня 2018
train.head()


    date    date_block_num  shop_id item_id item_price  item_cnt_day
    0             02.01.2013    0   59  22154   999.00  1.0          
    1             03.01.2013    0   25  2552    899.00  1.0          
    2             05.01.2013    0   25  2552    899.00  -1.0         
    3             06.01.2013    0   25  2554    1709.05 1.0          
    4             15.01.2013    0   25  2555    1099.00 1.0

test.head()

    ID  shop_id item_id
    0   0   5   5037
    1   1   5   5320
    2   2   5   5233
    3   3   5   5232
    4   4   5   5268

Я хочу добавить столбец item_price в мой тестовый фрейм из моего фрейма данных поезда, поэтому я пытаюсь объединить два фрейма данных в «item_id», «item_id» содержит почти 90% похожих значений в обоихфреймы данных, но получаются странные результаты

df=pd.merge(test[['item_id']],train[['item_price','item_id']],on='item_id',how='inner’)
    <class 'pandas.core.frame.DataFrame'>
    Int64Index: 60732252 entries, 0 to 60732251
    Data columns (total 2 columns):
    item_id       int64
    item_price    float64
    dtypes: float64(1), int64(1)
    memory usage: 1.4 GB

Может кто-нибудь, пожалуйста, помогите мне, что происходит и как я могу исправить это.

1 Ответ

0 голосов
/ 12 июня 2018

На мой взгляд, существует проблема с дубликатами.

Одним из возможных решений является их удаление:

test = test.drop_duplicates('item_id')
train= train.drop_duplicates('item_id')

... или добавление вспомогательных столбцов для слияния:

test['g'] = test.groupby('item_id').cumcount()
train['g'] = train.groupby('item_id').cumcount()

df=pd.merge(test[['item_id', 'g']],
            train[['item_price','item_id', 'g']],on=['item_id', 'g']).drop('g', axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...