нормализация строк в уникальные строки путем перемещения некоторых значений в столбцы - PullRequest
0 голосов
/ 10 мая 2018

У меня есть датафрейм, который в настоящее время выглядит так:

 index  serial          email     firstname     lastname     country     job    course     completed
     0    0005    one@two.com         David        Smith          US   Sales   course1            Y
     1    0076  three@two.com          John       Bloggs          GB    Exec   course2            Y
     2    0005    one@two.com         David        Smith          US   Sales   course2            Y
     3    0005    one@two.com         David        Smith          US   Sales   course3            Y
     4     NaN    foo@bar.com           Foo          Bar          IN     ext   course2            Y
     5     NaN    bar@foo.com           Bar          Far          NZ     ext   course2            Y
   ...     ...            ...           ...         ...          ...          ...           ...

Я бы хотел нормализовать этот фрейм данных, чтобы человек появлялся только один раз (в одной строке). Другими словами, я хотел бы преобразовать это во что-то вроде этого:

 index   serial           email     firstname     lastname     country     job    course1    course2    course3
     0     0005     one@two.com         David        Smith          US   Sales        Yes        Yes        Yes
     1     0076   three@two.com          John       Bloggs          GB    Exec        NaN        Yes        NaN
     2      NaN     foo@bar.com           Foo          Bar          IN     ext        NaN        Yes        NaN
     3      NaN     bar@foo.com           Bar          Far          NZ     ext        NaN        Yes        NaN
   ...      ...             ...           ...          ...         ...           ...        ...        ...

Обратите внимание, что уникальный идентификатор - это серийный номер сотрудников компании (job == Sales или Exec), а для внешних сотрудников (job == ext) - их электронная почта.

1 Ответ

0 голосов
/ 10 мая 2018

Я пробовал это,

dumm= (pd.get_dummies(df['course'])).astype(str).replace({'0':np.NaN,'1':'Yes'})
del df['course']
df=pd.concat([df,dumm],axis=1)
df=df.groupby('email').apply(lambda x:x.fillna(method='bfill'))
df=df.drop_duplicates(subset=['email'],keep='first')

Выход:

   index  serial          email firstname lastname country    job completed  \
0      0     5.0    one@two.com     David    Smith      US  Sales         Y   
1      1    76.0  three@two.com      John   Bloggs      GB   Exec         Y   
4      4     NaN    foo@bar.com       Foo      Bar      IN    ext         Y   
5      5     NaN    bar@foo.com       Bar      Far      NZ    ext         Y   

  course1 course2 course3  
0     Yes     Yes     Yes  
1     NaN     Yes     NaN  
4     NaN     Yes     NaN  
5     NaN     Yes     NaN 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...