Как внутреннее объединение в pandas как SQL, застрял в проблеме ниже - PullRequest
0 голосов
/ 07 января 2020

У меня есть два df с именем "df" и второй как "topwud".

df

topwud

когда я соединяю эти два кадра данных, используя внутреннее соединение, используя BOMCPNO и PRTNO в качестве столбца соединения

как

second_level=pd.merge(df,top_wud ,left_on='BOMCPNO', right_on='PRTNO', how='inner').drop_duplicates()

Затем я получаю этот кадр данных

Результат

Я не хочу, чтобы обычное имя приходило как PRTNO_x и PRTNO_y, я хочу оставить только PRTNO_x в моем результирующем фрейме данных как имя "PRTNO", которое является именем по умолчанию. Пожалуйста, помогите мне:)

1 Ответ

0 голосов
/ 07 января 2020

try This -

pd.merge(df1, top_wud, on=['BOMCPNO', 'PRTNO'])

Что это будет делать, так это возвращать только значения, в которых BOMCPNO и PRTNO существуют в обоих фреймах данных, поскольку тип слияния по умолчанию является внутренним слиянием.

Итак то, что вы могли бы сделать, это сравнить этот объединенный размер df с вашим первым и посмотреть, одинаковы ли они, и если да, то вы можете выполнить объединение в обоих столбцах или просто удалить / переименовать столбцы суффикса _x / _y B.

Я бы потратил время на то, чтобы определить, действительно ли эти значения одинаковы и существуют в обоих фреймах данных, и в этом случае вы можете выполнить внешнее слияние sh:

pd.merge(df1, df2, on=['A', 'B'], how='outer')

Тогда вы можете сделать следующее: затем удалите дублирующиеся строки (и, возможно, любые строки NaN), и это даст вам чистый объединенный фрейм данных.

merged_df.drop_duplicates(cols=['BOMCPNO', 'PRTNO'],inplace=True)

также попробуйте другие типы объединения, так как я не знаю, что именно вы хотите, я думаю, что осталось inner.

проверьте это, если это решит вашу проблему.

...