Я пытаюсь соединить два фрейма данных панд, используя два столбца:
new_df = pd.merge(A_df, B_df, how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')
но получил следующую ошибку:
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4164)()
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4028)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13166)()
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13120)()
KeyError: '[B_1, c2]'
Есть идеи, каким должен быть правильный способ сделать это? Спасибо!
python
python-3.x
pandas
join
Edamame
источник
источник
left_on
иright_on
должен быть списком строк, а не строкой, которая выглядит как список.Ответы:
Попробуй это
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html
источник
left_on
иright_on
так же,a
иb
мы можем использоватьon = ['a', 'b']
?проблема здесь в том, что, используя апострофы, вы устанавливаете передаваемое значение как строку, тогда как на самом деле, как сказано в документации @Shijo, функция ожидает метку или список, но не строку! Если список содержит каждое имя существа столбцов, переданное как для левого, так и для правого кадра данных, то каждое имя столбца должно быть отдельно в апострофах. Из сказанного мы можем понять, почему это не так:
И это правильный способ использования функции:
источник
Еще один способ сделать это:
new_df = A_df.merge(B_df, left_on=['A_c1','c2'], right_on = ['B_c1','c2'], how='left')
источник