我正在努力弄清楚如何将表从一种布局转换为另一种布局:
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
我的熊猫知识有点简陋,我无法弄清楚完成转换的最简单方法是什么。
答案 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")