Операция над фреймом данных для преобразования строк в отдельные столбцы - PullRequest
1 голос
/ 11 мая 2019

У меня есть фрейм данных, содержащий следующую структуру

    **Email             MAC**                   
    email_1@mail.com    AA:AA:AA:AA:A1      
    email_1@mail.com    AA:AA:AA:AA:A5      
    email_1@mail.com    PP:PP:PP:PP:P5
    email_1@mail.com    PP:PP:PP:PP:P6
    email_2@mail.com    AA:AA:AA:AA:A2
    email_2@mail.com    AA:AA:AA:AA:A9

Я должен установить их в

**Email             MAC1                    MAC2                        MAC3**
email_1@mail.com    AA:AA:AA:AA:A1      AA:AA:AA:AA:A5              PP:PP:PP:PP:P5
email_2@mail.com    AA:AA:AA:AA:A2      AA:AA:AA:AA:A9              Null

Значение PP: PP: PP: PP: P6, соответствующее email_1@ mail.com был удален, так как он превышает количество разрешенных столбцов (разрешены только первые 3 значения).

1 Ответ

0 голосов
/ 11 мая 2019

Используйте GroupBy.cumcount для счетной колонки, фильтруйте по boolean indexing, изменяйте по DataFrame.set_index с DataFrame.unstack:

N = 3
g = df.groupby('Email').cumcount().add(1)
df = df[g <= N]
df1 = df.set_index(['Email',g[g<=N]])['MAC'].unstack().add_prefix('MAC').reset_index()
print (df1)
              Email            MAC1            MAC2            MAC3
0  email_1@mail.com  AA:AA:AA:AA:A1  AA:AA:AA:AA:A5  PP:PP:PP:PP:P5
1  email_2@mail.com  AA:AA:AA:AA:A2  AA:AA:AA:AA:A9             NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...