Python 使用pivot对多索引数据帧重新排序
我有一个数据帧df1,看起来像这样:Python 使用pivot对多索引数据帧重新排序,python,pandas,dataframe,pivot,Python,Pandas,Dataframe,Pivot,我有一个数据帧df1,看起来像这样: df1 = pd.DataFrame({'ID': [1,2,3,4,5,6], 'date': [1, 1, 1, 2, 2, 2], 'p_id': [1, 2, 3, 1, 2, 3], '9h30': [0.11,0.12,0.13,0.14,0.15,0.16],
df1 = pd.DataFrame({'ID': [1,2,3,4,5,6],
'date': [1, 1, 1, 2, 2, 2],
'p_id': [1, 2, 3, 1, 2, 3],
'9h30': [0.11,0.12,0.13,0.14,0.15,0.16],
'9h35': [0.21,0.22,0.23,0.24,0.25,0.26],
'9h40': [0.31,0.32,0.33,0.34,0.35,0.36]})
df1.set_index('ID', inplace=True)
9h30 9h35 9h40 date p_id
ID
1 0.11 0.21 0.31 1 1
2 0.12 0.22 0.32 1 2
3 0.13 0.23 0.33 1 3
4 0.14 0.24 0.34 2 1
5 0.15 0.25 0.35 2 2
6 0.16 0.26 0.36 2 3
如果我使用df2=df.pivot(index='p_id',columns='date')
我会得到df2:
9h30 9h35 9h40
date 1 2 1 2 1 2
p_id
1 0.11 0.14 0.21 0.24 0.31 0.34
2 0.12 0.15 0.22 0.25 0.32 0.35
3 0.13 0.16 0.23 0.26 0.33 0.36
但这并不是我想要的,这就是df3:
date 1 2
9h30 9h35 9h40 9h30 9h35 9h40
p_id
1 0.11 0.21 0.31 0.14 0.24 0.34
2 0.12 0.22 0.32 0.15 0.25 0.35
3 0.13 0.23 0.33 0.16 0.26 0.36
有没有一种方法可以只使用pivot直接生成此输出?
如果没有,你能告诉我你将如何以一种有效的方式做这件事吗。
谢谢。我想你需要+:
这是一种明确的方式。但还是跟着我走吧
它工作得很好,谢谢你,但是你能确认没有办法用pivot直接从df1到df3吗?你可以使用替代方法
df2=df1。设置索引(['date','p\u id'])。取消堆栈(0)
或df2=df1。设置索引(['p\u id','date'])。取消堆栈()
,但这两种方法都有相同的问题。看来不是。我将使用@jezrael的解决方案,但感谢您展示了另一种方法,看到不同的可能性总是很有用的。
df2 = df2.swaplevel(0,1, axis=1).sort_index(axis=1)
print (df2)
date 1 2
9h30 9h35 9h40 9h30 9h35 9h40
p_id
1 0.11 0.21 0.31 0.14 0.24 0.34
2 0.12 0.22 0.32 0.15 0.25 0.35
3 0.13 0.23 0.33 0.16 0.26 0.36
time, date = list(df2.columns.get_level_values(0)), list(df2.columns.get_level_values(1))
df2.columns.set_levels(date, level=0, inplace=True)
df2.columns.set_levels(time, level=1, inplace=True)
# 1 2 1 2
# date 9h30 9h30 9h30 9h30 9h30 9h30 9h30 9h30
# p_id
# 1 0.11 0.14 0.21 0.24 0.31 0.34 1 4
# 2 0.12 0.15 0.22 0.25 0.32 0.35 2 5
# 3 0.13 0.16 0.23 0.26 0.33 0.36 3 6