Python 通过pivot重新排列列层次结构或更改排序顺序
我可以用Python 通过pivot重新排列列层次结构或更改排序顺序,python,pandas,indexing,Python,Pandas,Indexing,我可以用 df2 = pd.DataFrame( { "Day": np.array([1,1,1,2,2,2,3,3,3], dtype="int32"), "Subject": np.array(['a','b','c','a','b','c','a','b','c']), "Breakfast": np.random.randn(9), "Lunch": n
df2 = pd.DataFrame(
{
"Day": np.array([1,1,1,2,2,2,3,3,3], dtype="int32"),
"Subject": np.array(['a','b','c','a','b','c','a','b','c']),
"Breakfast": np.random.randn(9),
"Lunch": np.random.randn(9),
"Dinner": np.random.randn(9),
}
)
df2
然后
生成:
并希望对列层次结构进行重新排序或更改,以便按日期和主题排列的数据详细信息按照以下方式排列在主题下:
如何重新排列列层次结构或列排序顺序以实现此目的?旋转数据帧后,您可以使用轴1并沿着轴1进行:
df2.pivot(index="Day", columns="Subject").swaplevel(axis=1).sort_index(1)
或者,您可以使用后跟执行重塑:
df2.set_index(['Day', 'Subject']).stack().unstack([1, 2])
使用以下代码:
df3 = df2.pivot(index="Day", columns="Subject")
df3.columns = df3.columns.swaplevel()
df3.sort_index(axis=1, level=0, sort_remaining=False, inplace=True)
结果(对于我的随机数据)是:
Subject a b c
Breakfast Lunch Dinner Breakfast Lunch Dinner Breakfast Lunch Dinner
Day
1 -0.558349 -1.386076 1.518792 0.089063 -0.508046 1.095008 -0.260515 -0.087735 1.472237
2 0.876124 -0.574031 -1.089488 -1.439771 0.708469 -0.332422 -0.148037 1.285213 -1.313784
3 0.823619 0.714185 0.726317 -0.385264 -1.031764 0.924519 0.139066 0.296062 1.351840
df3 = df2.pivot(index="Day", columns="Subject")
df3.columns = df3.columns.swaplevel()
df3.sort_index(axis=1, level=0, sort_remaining=False, inplace=True)
Subject a b c
Breakfast Lunch Dinner Breakfast Lunch Dinner Breakfast Lunch Dinner
Day
1 -2.199182 0.810676 1.119673 1.685167 -1.469196 0.838108 -0.751882 1.678362 -0.312479
2 -0.275628 1.224855 1.142574 0.699516 -0.898156 -1.796295 0.593565 0.606979 0.549299
3 0.043365 0.562309 0.881739 0.746961 0.002600 0.344138 0.937465 1.402463 2.065739