我有一个如下所示的数据帧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],
'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
有没有办法只用枢轴直接产生这个输出? 如果没有,你能告诉我你将如何以有效的方式做到这一点。 谢谢。
答案 0 :(得分:0)
我认为您需要swaplevel
+ sort_index
:
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
答案 1 :(得分:0)
这是一种明确的方式。但请使用@jezrael's pandonic solution。
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