У меня есть два файла CSV, и я хочу использовать два DataFrames для поиска значений в первой таблице. Вот примеры форматов таблиц (с примерами данных в них). Я хочу взять каждое поле электронной почты в DF_SPO ниже и найти значение пользователя во фрейме данных DF_REF , чтобы добавить два новых столбца в таблицу.
DF_SPO
+--------+-------------------+--------------------------+
| tbl_id | EMAIL1 | EMAIL2 |
+--------+-------------------+--------------------------+
| 1 | test@example.com | anotheruser@example.com |
| 2 | test2@example.com | anotheruser2@example.com |
+--------+-------------------+--------------------------+
DF_HRI
+--------------------------+---------------+
| email | user |
+--------------------------+---------------+
| test@example.com | test_user |
| test2@example.com | test_user_2 |
| anotheruser@example.com | another_user |
| anotheruser2@example.com | another_user2 |
+--------------------------+---------------+
DF_SPO_MERGED
+--------+-------------------+--------------------------+--------------+-----------------+
| tbl_id | EMAIL1 | EMAIL2 | primaryUser | secondaryUser |
+--------+-------------------+--------------------------+--------------+-----------------+
| 1 | test@example.com | anotheruser@example.com | test_user | another_user |
| 2 | test2@example.com | anotheruser2@example.com | test_user_2 | another_user_2 |
+--------+-------------------+--------------------------+--------------+-----------------+
Основываясь на этой диаграмме, вот код, который я использую для поиска каждого адреса электронной почты.
import pandas as pd
df_spo = pd.read_csv("InventoryFeeds-SPO.csv", encoding="utf-8")
df_ref = pd.read_csv("InventoryFeeds-REF.csv", encoding="utf-8", dtype = {'user_num': str})
# Filter Reference Feed to contain only Email & Username
df_ref = df_ref.filter(['email', 'user'])
df_ref.drop_duplicates(subset='email', keep="last")
print(f"DF REF Size - {df_ref.size} | DF REF Shape - {df_ref.shape}")
print(f"DF SPO Size - {df_spo.size} | DF SPO Shape - {df_spo.shape}")
print("=" * 60)
print("MERGING Primary Owner!")
df_spo = df_spo.merge(df_ref, left_on='EMAIL1', right_on="email", how="left")
df_spo.rename(columns={"user": "primaryUser"}, inplace=True)
df_spo.drop('email', axis=1, inplace=True)
print(f"NEW DF SPO Size - {df_spo.size} | NEW DF SPO Shape - {df_spo.shape}")
Первое слияние работает, но я получаю гораздо больше строк, чем я ожидал.
DF HRI Size - 203234 | DF HRI Shape - (101617, 2)
DF SPO Size - 23268 | DF SPO Shape - (1939, 12)
============================================================
MERGING Primary Owner!
NEW DF SPO Size - 3336326 | NEW DF SPO Shape - (238309, 14)
Что-то мне не хватает? Пытаюсь понять, почему у меня получается так много лишних строк в итоговом объединенном фрейме данных.
Спасибо!