转换数据帧的问题

时间:2018-03-20 02:45:29

标签: python pandas

我正在努力弄清楚如何将表从一种布局转换为另一种布局:

Table1
DEP_NO  POSITION_CATEGORY   NAME
177     CLERICAL            BETTY SMITH
177     MANAGER             GRAHAM BROWN
177     EXECUTIVE           DAVID GREEN
200     CLERICAL            BETSY ROSS
200     MANAGER             GEORGE EAST
200     EXECUTIVE           MORRIS SMITH
300     CLERICAL            PHIL ORANGE
300     MANAGER             HAL SARTRE
300     EXECUTIVE           MARISOL BERN
400     CLERICAL            LISA HEAD
400     MANAGER             LINDA TELLER
400     EXECUTIVE           NICE GUY

Table2
DEP_NO  CLERICAL        MANAGER          EXECUTIVE
177     BETTY SMITH     GRAHAM BROWN     DAVID GREEN
200     BETSY ROSS      GEORGE EAST      MORRIS SMITH
300     PHIL ORANGE     HAL SARTRE       MARISOL BERN
400     LISA HEAD       LINDA TELLER     NICE GUY

正如您所看到的,tables1第二列的内容是table2中的列名, table1中的名称成为table2

中的内容

我的熊猫知识有点简陋,我无法弄清楚完成转换的最简单方法是什么。

2 个答案:

答案 0 :(得分:0)

您只需要pivot

df.pivot(*df.columns)
Out[280]: 
POSITION_CATEGORY     CLERICAL     EXECUTIVE       MANAGER
DEP_NO                                                    
177                BETTY SMITH   DAVID GREEN  GRAHAM BROWN
200                 BETSY ROSS  MORRIS SMITH   GEORGE EAST
300                PHIL ORANGE  MARISOL BERN    HAL SARTRE
400                  LISA HEAD      NICE GUY  LINDA TELLER

答案 1 :(得分:0)

从表1到表2,您可以使用pivot。具体来说,您希望将DEP_NO用作idenx,因为它定义了行标签。列应为" POSITION_CATEGORY"因为这是包含列名的列。假设您的数据框存储在df

df.pivot(index="DEP_NO", columns="POSITION_CATEGORY")

从表2到表1,您可以使用熔体。默认情况下,melt会创建一个两列数据框,其中原始数据框中的每个条目都有自己的行。第一列指示原始数据框中该行来自哪一列,第二列指示该值是什么。在这种情况下,您希望跟踪哪个DEP_NO与哪个值相关联。您可以通过使用id_vars关键字参数告诉pandas不要熔化DEP_NO列,如下所示。所有其他列名称都是您要标记的值" POSITION_CATEGORY",因此您可以告诉pandas使用var_name关键字参数将该名称赋予变量列。最后,原始数据框中的所有值都是名称,因此您可以使用" value_name"相应地标记该列。关键字参数:

df.melt(id_vars=["DEP_NO"], var_name="POSITION_CATEGORY", value_name="NAME")