我有一个包含以下结构的数据框
**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 已被丢弃,因为它超出了允许的列数(仅允许前 3 个值)。
最佳答案
使用GroupBy.cumcount
对于计数器列,按 boolean indexing
过滤, reshape 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
关于python - 对数据框进行操作以将行转换为单独的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56090087/