截断数据透视表中.sort_index(级别=1,轴=1)之后的列的顺序



数据帧df1

TYPE  WEEK  A  B  C  D
0  Type1     1  1  1  1  1
1  Type2     2  2  2  2  2
2  Type3     3  3  3  3  3
3  Type4     4  4  4  4  4

预期输出

A    C    B    D    A    C    B    D    A    C    B    D    A    C    B    D
WEEK     1    1    1    1    2    2    2    2    3    3    3    3    4    4    4    4
TYPE
Type1  1.0  1.0  1.0  1.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
Type2  NaN  NaN  NaN  NaN  2.0  2.0  2.0  2.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
Type3  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  3.0  3.0  3.0  3.0  NaN  NaN  NaN  NaN
Type4  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  4.0  4.0  4.0  4.0

我的方法:

df1 = pd.DataFrame(df1)
colname = list(df1.head())
tuples = []
for i in colname:
tuples.append((i,colname.index(i)+1))

index = pd.MultiIndex.from_tuples(tuples, names=["COLUMN", "ORDER"])   
df2 = pd.DataFrame(df1.values, columns=index)
df3 = pd.pivot_table(df1,index="TYPE",columns="WEEK", values=['A','B','C','D']).sort_index(level=1, axis=1)
#For df3 cannot attain the expected result because .sort_index(level=1, axis=1) will sort them out alphabetically to ['A','B','C','D']

需要.sort_index(level=1, axis=1)来交换数据透视表的级别。

生成另一个数据帧df2,以便将列的顺序固定为要在数据透视表中使用的['A','C','B','D']

COLUMN   TYPE WEEK  A  B  C  D
ORDER       1    2  3  4  5  6
0       Type1    1  1  1  1  1
1       Type2    2  2  2  2  2
2       Type3    3  3  3  3  3
3       Type4    4  4  4  4  4

在旋转之前创建CategoricalDtype

cat = pd.CategoricalDtype(['A', 'C', 'B', 'D'], ordered=True)
df3 = df.melt(['TYPE', 'WEEK'], var_name='COLUMN').astype({'COLUMN': cat}) 
.pivot_table('value', 'TYPE', ['COLUMN', 'WEEK']).sort_index(level=1, axis=1)

输出

>>> df3
COLUMN    A    C    B    D    A    C    B    D    A    C    B    D    A    C    B    D
WEEK      1    1    1    1    2    2    2    2    3    3    3    3    4    4    4    4
TYPE                                                                                  
Type1   1.0  1.0  1.0  1.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
Type2   NaN  NaN  NaN  NaN  2.0  2.0  2.0  2.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
Type3   NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  3.0  3.0  3.0  3.0  NaN  NaN  NaN  NaN
Type4   NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  4.0  4.0  4.0  4.0

相关内容

最新更新