В результате объединения панд пропускаются строки при соединении строк - PullRequest
0 голосов
/ 09 мая 2018

У меня есть набор данных, который я чистил, и чтобы очистить его, мне нужно было поместить его в сводную таблицу, чтобы суммировать некоторые данные. Теперь я помещаю его обратно в фрейм данных, чтобы я мог объединить его с некоторыми другими фреймами данных. df1 выглядит примерно так:

    Count   Region              Period      ACV  PRJ
    167     REMAINING US WEST   3/3/2018    5    57
    168     REMAINING US WEST   3/31/2018   10   83
    169     SAN FRANCISCO       1/13/2018   99   76
    170     SAN FRANCISCO       1/20/2018   34   21

df2 выглядит примерно так:

Count  MKTcode  Region
11     RSMR0    REMAINING US SOUTH
12     RWMR0    REMAINING US WEST
13     SFR00    SAN FRANCISCO

Я пытался объединить их с этим кодом:

df3 = pd.merge(df1, df2, on='Region', how='inner')

но по какой-то причине pandas не интерпретирует столбцы Region как одни и те же данные, и объединение включает данные NaN в столбце MKTcode и, кажется, добавляет df2 к df1, например:

Count  Region             Period    ACV             PRJ         MKTcode
193 WASHINGTON, D.C.    3/3/2018    36               38             NaN
194 WASHINGTON, D.C.    3/31/2018   12                3             NaN
195 ATLANTA              NaN        NaN             NaN           ATMR0
196 BOSTON               NaN        NaN             NaN           B2MRN

Я пробовал внутренние и внешние объединения, но реальная проблема заключается в том, что pandas интерпретирует столбец Region каждого фрейма данных как разные элементы. Столбец MKTcode и столбец Region в df2 содержит только 12 наблюдений, и каждое наблюдение происходит только один раз, тогда как df1 имеет несколько повторяющихся экземпляров в столбце Region (кратно одному и тому же городу). Есть ли способ, где я могу просто создать список из 12 MKT-кодов, которые мне нужны, и выполнить слияние, когда оно совпадает с каждым регионом, который я обозначу? Как матч один ко многим?

Спасибо.

1 Ответ

0 голосов
/ 09 мая 2018

Когда слияние не работает должным образом, первое, что нужно сделать, это посмотреть на ошибочные столбцы.

Самым большим виновником в большинстве случаев является трейлинг / лидирующие пробелы . Они обычно вводятся, когда DataFrames неправильно читаются из файлов.

Попробуйте избавиться от лишних пробельных символов, удалив их. Предполагая, что вам нужно присоединиться к столбцу «Регион», используйте

for df in (df1, df2):
    # Strip the column(s) you're planning to join with
    df['Region'] = df['Region'].str.strip()

Теперь слияние должно работать как положено,

pd.merge(df1, df2, on='Region', how='inner')

   Count_x             Region     Period  ACV  PRJ  Count_y MKTcode
0      167  REMAINING US WEST   3/3/2018    5   57       12   RWMR0
1      168  REMAINING US WEST  3/31/2018   10   83       12   RWMR0
2      169      SAN FRANCISCO  1/13/2018   99   76       13   SFR00
3      170      SAN FRANCISCO  1/20/2018   34   21       13   SFR00

Другая возможность, если вы все еще получаете NaN, может быть из-за разницы в пробельных символах между словами . Например, 'REMAINING US WEST' не будет сравниваться как равный с 'REMAINING US WEST'.

На этот раз исправление должно использовать str.replace:

for df in (df1, df2):
    df['Region'] = df['Region'].str.replace(r'\s+', ' ')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...