我有一个包含以下结构的数据框
**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已被丢弃,因为它超出了允许的列数(仅允许前三个值)。
答案 0 :(得分:0)
将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