как получить уникальные значения из списка столбцов по группам по user_id в пандах - PullRequest
3 голосов
/ 27 июня 2019

ввод: -

    print(df)
device_id           ids
025c08d535a074b4    [8972]
025c08d535a074b4    [10595, 10595]
02612734f96edc43    [10016, 8795, 10019, 8791, 8351, 8791]
02612734f96edc43    [10016, 8795, 10019, 8791, 8351, 10052, 8345]

должен выводить уникальный список идентификаторов для каждого device_d, например:

device_id           ids
025c08d535a074b4    [8972,10595]
02612734f96edc43    [10016, 8795, 10019,8791,8351,10052, 8345]

Я пытаюсь сделать это, используя: ->

    df=pd.DataFrame(df.groupby('device_id')['ids'].apply(set))

, но он не работает должным образом, добавляет ' для идентификаторов перед идентификаторами и возвращает список, как.

device_id           ids
025c08d535a074b4    [8972,'10595, 10595]
02612734f96edc43    ['10016,8795,10019,8791,8351,8791,'10016]

Ответы [ 2 ]

3 голосов
/ 27 июня 2019

Использование numpy.hstack и numpy.unique:

import numpy as np

df.groupby('device_id')['ids'].apply(lambda x: np.unique(np.hstack(x)))

или, если важно поддерживать порядок, используйте конструктор pandas.Series с drop_duplicates:

df.groupby('device_id')['ids'].apply(lambda x: pd.Series(np.hstack(x)).drop_duplicates().to_list())

[вне]

device_id
025c08d535a074b4                                    [8972, 10595]
02612734f96edc43    [10016, 8795, 10019, 8791, 8351, 10052, 8345]

Если вам нужен вывод как DataFrame, просто включите .reset_index:

df.groupby('device_id')['ids'].apply(lambda x: np.unique(np.hstack(x))).reset_index()

[вне]

          device_id                                            ids
0  025c08d535a074b4                                  [8972, 10595]
1  02612734f96edc43  [8345, 8351, 8791, 8795, 10016, 10019, 10052]
2 голосов
/ 27 июня 2019

Попробуйте использовать:

>>> grouped = df.groupby('device_id', as_index=False).sum()
>>> grouped['ids'] = grouped['ids'].apply(lambda x: sorted(set(x), key=x.index))
>>> grouped
          device_id                                            ids
0  025c08d535a074b4                                  [8972, 10595]
1  02612734f96edc43  [10016, 8795, 10019, 8791, 8351, 10052, 8345]
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...