首页 > 解决方案 > 对数据框进行操作以将行转换为单独的列

问题描述

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

    **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 个值)。

标签: pythonpython-3.xnumpydataframe

解决方案


用于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

推荐阅读