Включить несопоставимые строки в скрипт Python, который объединяет два файла на основе одного столбца - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть два CSV-файла, показанные ниже.

Первый файл:

abTestGroup, платформа, COUNTRYCODE, идентификатор пользователя

group_control, ios, GB, aaaaaaaaaaa group_control, ios, GB, aaaaaaaaaaa

group_control, ios, GB, aaaaaaaaaaa group_control, ios, GB, aaaaaaaaaaa

group_test, андроид, GB, ccccccccccc

Второй файл:

dateActivity, ProductID, стоимость, идентификатор пользователя

2018-03-02, specialpack, 0,198, AAAAAAAAAAA

2018-03-03, specialpack, 0,498, AAAAAAAAAAA

2018-03-02, specialpack, 0,398, bbbbbbbbbbb

2018-03-02, specialpack, 0,998, ccccccccccc

и в этом случае у них есть одна общая вещь: userId.

Я хочу объединить эти файлы и создать отношения родитель-потомок, используя Python (Pandas).

Я использовал следующий скрипт:

import pandas as pd

a = pd.read_csv('PARENT.csv', encoding = "UTF-8", mangle_dupe_cols=True, usecols=['abTestGroup','platform','countryCode','userId'])
b = pd.read_csv("CHILD.csv")
merged = b.merge(a, on='userId', how='inner')

merged = merged.drop_duplicates()

merged.to_csv("final_output.csv", index=False)

для получения следующего вывода:

dateActivity, ProductID, стоимость, идентификатор пользователя, abTestGroup, платформа, COUNTRYCODE

2018-03-02, specialpack, 0,198, AAAAAAAAAAA, group_control, ИОС, ГБ * * 1 042

2018-03-03, specialpack, 0,498, AAAAAAAAAAA, group_control, ИОС, ГБ * * тысяча сорок четыре * * +1045 2018-03-02, specialpack, 0.998, ccccccccccc, group_test, андроид, ГБ

userId 'bbbbbbbbbbb' не отображается в окончательном выводе, поскольку его нет в обоих файлах. Как я могу включить несопоставленные строки (не сопоставленные userIds) и назначить значение «Другое» для ячеек?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

метод соединения будет работать для вашего случая:

a.join(b)
0 голосов
/ 26 апреля 2018

Поскольку вы выполняете внутреннее соединение, будет возвращено только соответствующее userIds. Чтобы вернуть несопоставленный userIds, вы можете выполнить правое / левое соединение в зависимости от последовательности соединения в следующем выражении.

merged = b.merge(a, on='userId', how='inner')

Если b содержит bbbbbbbbbbb, вы должны выполнить левое соединение. Если a содержит bbbbbbbbbbb, тогда вы сделаете правильное соединение.

merged = b.merge(a, on='userId', how='left')
merged = b.merge(a, on='userId', how='right')

Пожалуйста, смотрите типы соединений ниже.

The difference between joins

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...