Есть ли способ точно разработать идентификатор или идентификатор для каждого родителя в примере набора данных с помощью Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли способ точно разработать идентификатор или идентификатор для каждого родителя в примере набора данных с помощью

Сообщение Anonymous »

Сейчас я пытаюсь очистить базу данных и создать уникальные идентификаторы для каждого родителя. Для каждого родителя были созданы дубликаты учетных записей — по одной для каждого из их учеников. Например, родитель вводит свое имя в один год с псевдонимом, а в следующий — без него, и это рассматривается как две разные учетные записи. Эти идентификаторы позволят мне создать одну родительскую учетную запись для всех их детей.
Пример таблицы фиктивных данных приведен ниже. Эти данные включают в себя идентификаторы учащихся, имена родителей, родственные связи, номера телефонов, электронные письма, адреса и еще несколько вещей. Моя проблема заключается в том, чтобы объединить родителей, таких как Элис Джонсон, в один идентификатор, используя Python и Pandas.
Фиктивные родительские данные



номер студента
приоритет
dcid
имя родителя
проживает с
законным опекуномrel
частный телефон
рабочий телефон
сотовый
электронная почта
улица
city_state_zip
студентская улица
студент fn




10000001
1
100001
(Союзник) Элис Джонсон
1< /td>
1
Мать
555-123-4567

555-987-6543
alice.johnson@example.com
123 Main St
Anytown, США 12345
Джонсон
Лиам

10000004
1
100004
Алиса Элли Джонсон
1
1
Мать
555 -123-4567

555-987-6543
alice.johnson@example.com< /td>
123 Main St NE
Anytown, США 12345
Джонсон
< td>Дэвид


10000003
2
100003
Элис Джонсон
1
1
< td>Юридический представитель
555-123-4568
555-123-4568

alice.johnson@example.com
780 Elm St
Anytown, США 12345
Сенна
Кэрол


100000022
100002
Боб Смит
1
1
Другое
555-555-5555
555-555-5554
555-555-5555
bob.smith@example.com
456 Oak St
Anytown, США 12345
Смит
Роберт

10000005
1
100005
Бобби Боб Смит
1
1
Отец
555 -555-5555

555-555-5555
bob.smith@example.com< /td>
456 Oak St
Anytown, США 12345
Смит
Эмили


10000006
1
< td>100006
Фрэнк Тейлор – НЕ СВЯЗЫВАТЬСЯ
1
0
Отец
555-777-8888

555-999-0000< /td>
frank.taylor@example.com
654 Oak St
Anytown, США 12345
Тейлор
Фрэнки


10000007
2
100007
Грейс Мартинес
0
1
Мать
555-123-7890


grace.martinez@example.com
Мейпл-стрит, 321
Anytown, США 12345
Мартинес
Чейз


10000008
2
100008
Генри Родригес
1
1
Отец
555-987-6543
555-321-6543

789 Elm St
Anytown, США 12345
Родригес
Кэрол


10000009
2
100009
Изабелла Эрнандес
1
1
Мать
555-555 -5555
555-123-4567
555-666-7777
isabella.hernandez@example .com
456 Oak St
Anytown, США 12345
Эрнандес
Джон


10000010
2
100010
Джейкоб Гонсалес
1
1
Отец
555-444-3333
555-222-1111
555- 777-9999
jacob.gonzalez@example.com
321 Cedar St
Anytown, США 12345
Гонсалес
Кэтрин


10000011
2
100011
Кэтрин Ли
1
1
Мать
555-321-4567

555-987-6543
katherine.lee@example.com
789 Pine St< /td>
Anytown, США 12345
Ли
Лиам


10000012
2
100012
Лиам Нгуен
1
1
Отец
555 -888-7777
555-555-5555
555-123-4567
liam.nguyen @example.com
987 Cedar St
Anytown, США 12345
НгуенМиа


10000013
2
100013
Миа Перес
1
1Мать
555-222-1111
555-666-7777
555-333-4444

321 Elm St
Anytown, США 12345Перес
Нэнси


10000014
2
100014
Оливия Адамс (в Британской Колумбии)
0< /td>
1
Мать
555-666-9999

555-999-6666
olivia.adams@example.com
987 Elm St ne< /td>
Anytown, США 12345
Адамс
Миа


10000015
2
100015
Оливия Адамс (Британская Колумбия)
0
1
Мать
555-111-2222

555-333-4444
olivia.adams@ example.com
неизвестно
Anytown, США 12345
Адамс
Патрик


10000016
2
100016
Оливия Адамс (в Британской Колумбии)
0
1
Мать
555-444-5555

555-222- 1111
olivia.adams@example.com
987 Elm St
Anytown, США 12345
Адамс
Серена



У меня возникли проблемы с точным определением одного идентификатора для каждого родителя без перезаписи родительских данных или отсутствия родителей, имеющих псевдонимы.
Пока мне удалось это сделать. прочитать данные в фрейм данных. Я предварительно обработал данные, чтобы попытаться свести к минимуму дубликаты, задав строки строчными буквами и удалив пробелы. Ниже я также объединил данные, чтобы объединить столбцы с номерами телефонов в один столбец для каждого студента. Я удалил дубликаты из всех столбцов.

Код: Выделить всё

data = pd.read_csv(
"archive/pall_cust.csv"
)

data["street"] = data["street"].str.lower()
data["email"] = data["email"].str.lower()
data["street"] = data["street"].astype("string")
data["parent_name"] = data["parent_name"].astype("string")
data["parent_name"] = data["parent_name"].str.strip()
data["parent_name"] = data["parent_name"].str.title()

phone_df = pd.melt(
data,
id_vars=["dcid", "priority"],
value_vars=["priphone", "workphone", "cell"],
var_name="phonetype",
value_name="phonenumberasentered",
)
phone_df.sort_values("dcid")

phone_df.dropna(subset=["phonenumberasentered"], inplace=True)

dup = phone_df.duplicated(
subset=["dcid", "priority", "phonenumberasentered"], keep="first"
)
phone_df.loc[dup, ["phonetype", "phonenumberasentered"]] = None
phone_df.to_csv("phone.csv")

merged_df = pd.merge(data, phone_df, on=["priority", "dcid"], how="left").drop(
columns=["priphone", "workphone", "cell", "entry_date", "school"]
)

merged_df.drop_duplicates(
subset=[
"parent_name",
"dcid",
"liveswith",
"legalguardian",
"rel",
"email",
"phonenumberasentered",
"street",
"city_state_zip",
"ln",
"fn",
"studentnumber",
],
inplace=True,
)

Это проблемная область. Я не могу понять, как установить уникальный родительский идентификатор. Ниже приведено то, что я пробовал, но группировка по приоритету, rel, street, city_state_zip и введенному номеру телефона, а затем взятие максимального идентификатора учащегося из этой группировки для идентификации родителей, которые я обнаружил, перезаписывает имена некоторых родителей в моем наборе данных. Я не могу использовать электронную почту, потому что некоторые родители с разными именами, например, мать и отец, используют один и тот же адрес электронной почты.

Код: Выделить всё

max_student = merged_df.loc[
merged_df.groupby(
["priority", "rel", "street", "city_state_zip", "phonenumberasentered"]
)["dcid"].idxmax()
]

parent_names_from_max = max_student.set_index(
["priority", "rel", "street", "city_state_zip", "phonenumberasentered"]
)["parent_name"]

merged_df["parent_name"] = merged_df.set_index(
["priority", "rel", "street", "city_state_zip", "phonenumberasentered"]
).index.map(parent_names_from_max)
merged_df.reset_index(drop=True, inplace=True)

parent_to_id = {
value: idx + 1 for idx, value in enumerate(merged_df["parent_name"].unique())
}
merged_df.loc[:, "New Contact Identifier"] = merged_df["parent_name"].map(parent_to_id)
Наконец, я попробовал сначала использовать такие вещи, как расстояние Спейси или Левенштейна, чтобы попытаться выбрать похожие родительские имена, но обнаружил, что это работает недостаточно эффективно. Спасибо за ваши идеи и помощь.

Подробнее здесь: https://stackoverflow.com/questions/783 ... arent-in-t
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»