資料框 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
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/414820.html
標籤:
上一篇:python中的正則運算式替換列值的最后兩位數字,如果最后兩位數字為30,則將其替換為50
下一篇:如何根據另一列真值填充一列?
