сгруппировать по более чем 1 столбцу - PullRequest
0 голосов
/ 27 июня 2018

У меня есть список документов, представленных каждым пользователем. Например, Пользователь arjun001 имеет 5 документов, но они перечислены в 2 разных столбцах. И они могут быть повторены. Например,

try:
    from StringIO import StringIO
except ImportError:
    from io import StringIO

myst="""
arjun001 /doc/Repo/a/Documents/PanCard.pdf /doc/app/b/Documents/approval.png
arjun001 /doc/Repo/a/Documents/PanCard.pdf /doc/app/b/Documents/download.png
arjun001 /doc/Repo/a/Documents/Occuation.pdf /doc/app/b/Documents/Income.jpg
sandip.123 /doc/Repo/a/Documents/PanCard.pdf /doc/app/b/Documents/Domicile.jpg
sandip.123 /doc/Repo/a/Documents/PanCard.pdf /doc/app/b/Documents/Bank.jpg

"""
u_cols=['user_id', 'document_path', 'doc_path']

myf = StringIO(myst)
import pandas as pd
df = pd.read_csv(StringIO(myst), sep=' ', names = u_cols)

Как мне найти уникальные документы для каждого пользователя? Ожидаемый результат будет выглядеть примерно так ...

user_id, documents
arjun001 /doc/Repo/a/Documents/PanCard.pdf 
arjun001 /doc/app/b/Documents/approval.png
arjun001 /doc/app/b/Documents/download.png
arjun001 /doc/Repo/a/Documents/Occuation.pdf 
arjun001 /doc/app/b/Documents/Income.jpg
sandip.123 /doc/Repo/a/Documents/PanCard.pdf 
sandip.123 /doc/app/b/Documents/Domicile.jpg
sandip.123 /doc/app/b/Documents/Bank.jpg

1 Ответ

0 голосов
/ 27 июня 2018

Использование melt с drop_duplicates:

df = (df.melt('user_id', value_name='documents')
       .sort_values('user_id')
       .drop_duplicates(['user_id','documents'])
       .drop('variable', 1)
       .reset_index(drop=True))

Или используйте set_index с unstack:

df = (df.set_index('user_id')
        .unstack()
        .reset_index(level=0, drop=True)
        .reset_index(name='documents')
        .sort_values('user_id')
        .drop_duplicates(['user_id','documents'])
        .reset_index(drop=True))

print (df)
      user_id                            documents
0    arjun001    /doc/Repo/a/Documents/PanCard.pdf
1    arjun001  /doc/Repo/a/Documents/Occuation.pdf
2    arjun001    /doc/app/b/Documents/approval.png
3    arjun001    /doc/app/b/Documents/download.png
4    arjun001      /doc/app/b/Documents/Income.jpg
5  sandip.123    /doc/Repo/a/Documents/PanCard.pdf
6  sandip.123    /doc/app/b/Documents/Domicile.jpg
7  sandip.123        /doc/app/b/Documents/Bank.jpg
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...