В «поставщиках» df я пытаюсь создать столбец под названием «Категория без заказа», который будет иметь «Категорию» из «категорий» df на основе значения в столбце «Уникальный».
Вот ДФС:
import pandas as pd
suppliers = pd.DataFrame({'Vendor Number': ['260508', '260525', '260549', '260561','260579','260587'],
'Unique': ['26050822015070', '26052522002153', '260549EXPENSE', '260561EXPENSE','2605792972508701C0000','26058738210793']})
categories = pd.DataFrame({'Vendor Number': ['260508', '260525', '260549','260587'],
'Unique': ['26050822015070', '26052522002153', '260549EXPENSE','26058738210793'],
'Category': ['Maintenance', 'IT','Facilities','Travel Agent']})
Когда я использую:
suppliers['Non-PO Category'] = pd.merge(suppliers, categories[['Unique','Category']], on='Unique', how='left')
или
suppliers['Non-PO Category'] = pd.merge(suppliers, categories, how='left', left_on='Unique', right_on='Unique')
Я получаю сообщение об ошибке: ValueError: неправильное количество переданных элементов 4, размещение подразумевает 1
Заранее спасибо.
@Трикс. Спасибо. Я внес это изменение, но получил сообщение об ошибке: "Неверное количество элементов, переданных 17, размещение подразумевает 1"?
@ Андриан, если вы можете предоставить образцы своих фреймов данных, я постараюсь предоставить вам именно то, что вам нужно.
@sophods Спасибо. Я обновил свой вопрос с помощью dfs и упрощенной постановки задачи.
@ Андриан Спасибо за это. Пожалуйста, проверьте обновленный ответ ниже. Я думаю, это то, что вам нужно. Дайте мне знать.
Причина, по которой вы получаете сообщение об ошибке, заключается в том, что вы пытаетесь создать новый столбец с помощью pd.merge
, в то время как по умолчанию pd.merge
возвращает фрейм данных объединенных объектов. Ваш код:
suppliers['Non-PO Category'] = pd.merge(suppliers, categories[['Unique','Category']], on='Unique', how='left')
Следовательно, если вы измените свой код и стремитесь вернуть фрейм данных, например:
new_suppliers = pd.merge(suppliers, categories[['Unique','Category']], on='Unique', how='left')
Вы получите желаемый результат:
new_suppliers
Out[8]:
Vendor Number Unique Category
0 260508 26050822015070 Maintenance
1 260525 26052522002153 IT
2 260549 260549EXPENSE Facilities
3 260561 260561EXPENSE NaN
4 260579 2605792972508701C0000 NaN
5 260587 26058738210793 Travel Agent
Надеюсь, это ответит на ваш вопрос.
Обратите внимание, что это создает новый фрейм данных. Если вы этого не хотите, вы можете перезаписать предыдущий, просто:
suppliers = pd.merge(suppliers, categories[['Unique','Category']], on='Unique', how='left')
Спасибо! Кажется, что это проверит, присутствуют ли значения из «Уникального» (df «final») в столбце «Уникальный» в df «NonPO_Suppliers» и не вернут значения в категории столбца (из файла «NonPO_Suppliers») для соответствующих значений в столбце Единственный на df "final"? Я хочу узнать категорию из «NonPO_Suppliers» на основе столбца «Уникальный».
Можете ли вы предоставить образцы ваших двух фреймов данных, чтобы я мог их воспроизвести? Сделайте это в виде словаря, чтобы я мог быстро воссоздать, пожалуйста.
Большое спасибо! Это работало со словарем, но когда я использую код для создания столбца «Уникальный» в файле «поставщики» (обычно его там нет) с кодом: suppliers['Unique']=suppliers['Vendor Number'].astype(str) + supplier['Vendor Site Code'].astype(str)
- и затем выполняю слияние, как вы указали, я получаю «TypeError: строковые индексы должны быть целыми числами». Это потому, что «Уникальный» является буквенно-цифровым, например. "260561EXPENSE", есть идеи, как избежать этой ошибки? Я знаю, что это превышает мой первоначальный вопрос. Должен ли я опубликовать его как новый вопрос и отметить этот вопрос как решенный? Спасибо!
Да, я думаю, это хороший момент. Отметьте это как решенное и опубликуйте новое. Попробую и новую решить. Просто дайте мне знать, когда вы это сделаете, чтобы я получил уведомление.
Можете ли вы принять и закрыть вопрос, пожалуйста? Кроме того, вы можете попросить новый.
Извиняюсь за опоздание. Мне пришлось переписать свой код и найти ссылку на файлы в моем новом вопросе. Я принимаю ответ и, пожалуйста, посмотрите ссылку на мой новый вопрос. Большое спасибо! stackoverflow.com/questions/65346930/…
Я думаю, что понимаю вопрос к вашему новому. Пожалуйста, проверьте ответ и должен работать :)
Почему вы используете NonPO_Suppliers[['Unique','Category']]? используйте вместо этого: pd.merge(final, NonPO_Suppliers, как=left, left_on=key_of_left_table, right_on=key_on_right_table)