对数据框进行操作以将行转换为单独的列

时间:2019-05-11 11:53:50

标签: python python-3.x numpy dataframe

我有一个包含以下结构的数据框

    **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

与email_1@mail.com对应的值PP:PP:PP:PP:P6已被丢弃,因为它超出了允许的列数(仅允许前三个值)。

1 个答案:

答案 0 :(得分:0)

GroupBy.cumcount用于计数器列,用boolean indexing过滤,用DataFrame.set_indexDataFrame.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