Сравнение данных из двух таблиц Excel, где имена столбцов различны
У меня есть две таблицы Excel, помещенные в рамку данных Pandas.
Пример:
1.csv EmployeeID | DOB | Age A | 12/11/1978 | 2 B | 12/09/1988 | 8 C | 12/02/1985 | 20 D | 11/11/1990 | 25 2.csv MemberIdentifier| DateofBirth| YOW A | 12/11/1978 | 2 B | 12/09/1988 | 8 C | 12/02/1985 | 20 result.csv EmployeeID | MemberIdentifier | DOB |DateofBirth| Exp | YOW A | A | 12/11/1978 | 12/11/1978| 2 | 2 B | B | 12/09/1988 | 12/09/1988| 8 | 8 C | C | 12/02/1985 | 12/02/1985| 20 | 20 D | NA | NA | NA | NA | NA
Теперь, как получить результат, который сравнивает оба листа на основе данных не по именам столбцов, потому что имена столбцов могут быть чем угодно.
- Использование python для очистки данных с помощью pandas после чтения данных из файла excel
- Pandas 0.19.2 read_excel IndexError: индекс индекса за пределами диапазона
- Как пропустить строки на основе регулярных выражений с помощью pandas.read_excel?
- Как вставить запятую в качестве разделителя тысяч в столбце dataframe pandas?
- Как объединить столбцы без имени заголовка в сценарии python?
Любой намек намека или представление о том, как начать, будет здорово !!
- Pandas MemoryError с concat на относительно небольших файлах excel
- Экспорт кадра данных Pandas с текстовым столбцом, содержащим текст utf-8 и URL-адреса в Excel
- Определение суммы, исключая определенные значения
- Отправка данных Excel на сервер через сокеты / общую папку в локальной сети
- python - экспорт мультииндексной базы данных pandas в excel
- Напишите dataframe, чтобы преуспеть с заголовком
- Как написать список словарей в файл excel с помощью python?
- pd.ExcelFile: файл содержит списки поплавков, но списки импортируются как строка
Вам нужны параметры left_on
и right_on
в merge
с левым соединением:
df = pd.merge(df1, df2, left_on='EmployeeID', right_on='MemberIdentifier', how='left') print (df) EmployeeID DOB Age MemberIdentifier DateofBirth YOW 0 A 12/11/1978 2 A 12/11/1978 2.0 1 B 12/09/1988 8 B 12/09/1988 8.0 2 C 12/02/1985 20 C 12/02/1985 20.0 3 D 11/11/1990 25 NaN NaN NaN
Если нужны столбцы соответствия в двух DataFrames
используйте:
d = {} for col2 in df2.columns: for col1 in df1.columns: cond = df2[col2].isin(df1[col1]).all() if cond: d[col2] = col1 print (d) {'MemberIdentifier': 'EmployeeID', 'DateofBirth': 'DOB', 'YOW': 'Age'}
Наконец, вы можете переименовать столбцы в dict
:
df2 = df2.rename(columns=d) print (df2) EmployeeID DOB Age 0 A 12/11/1978 2 1 B 12/09/1988 8 2 C 12/02/1985 20