我该如何选择df:
Dates Type 1 2 3 ...
2018-01-01 Type1 Golf Van Jeep
2018-01-02 Type1 Golf Van Jeep
2018-01-01 Type2 Golf1 Van1 Jeep1
2018-01-02 Type2 Golf2 Van2 Jeep2
并将其转换为:
Type1 Type2
Dates 1 2 3 1 2 3 ...
2018-01-01 Golf Van Jeep Golf1 Van1 Jeep1
2018-01-02 Golf Van Jeep Golf2 Van2 Jeep2
编辑: 我想介绍这样的第二个索引:
Type Type1 Type2
Numbers 1 2 3 1 2 3
Dates ...
2018-01-01 Golf Van Jeep Golf1 Van1 Jeep1
2018-01-02 Golf Van Jeep Golf2 Van2 Jeep2
编辑: 现在,如果我想重新标记所有数字索引值-我将如何创建它:
Type Type1 Type2
Numbers p1 p2 p3 p1 p2 p3
Dates ...
2018-01-01 Golf Van Jeep Golf1 Van1 Jeep1
2018-01-02 Golf Van Jeep Golf2 Van2 Jeep2
编辑:
可以使用:
.add_prefix('hh')
答案 0 :(得分:3)
将DataFrame.set_index
与DataFrame.unstack
一起使用,然后按DataFrame.swaplevel
更改级别顺序,按DataFrame.sort_index
排序MultiIndex
:
df = df.set_index(['Dates','Type']).unstack().swaplevel(0,1, axis=1).sort_index(axis=1)
print (df)
Type Type1 Type2
1 2 3 1 2 3
Dates
2018-01-01 Golf Van Jeep Golf1 Van1 Jeep1
2018-01-02 Golf Van Jeep Golf2 Van2 Jeep2
编辑:通过元组添加DataFrame.rename_axis
:
df = (df.set_index(['Dates','Type'])
.unstack()
.swaplevel(0,1, axis=1)
.sort_index(axis=1)
.rename_axis(('Type','Numbers'), axis=1))
print (df)
Type Type1 Type2
Numbers 1 2 3 1 2 3
Dates
2018-01-01 Golf Van Jeep Golf1 Van1 Jeep1
2018-01-02 Golf Van Jeep Golf2 Van2 Jeep2
答案 1 :(得分:1)
IIUC melt
,然后pivot
将它退回
s=df.melt(['Dates','Type']).pivot_table(index=['Dates'],columns=['Type','variable'],values=['value'],aggfunc='sum')
s.columns=s.columns.droplevel(level=0)
s
Out[189]:
Type Type1 Type2
variable 1 2 3 1 2 3
Dates
2018-01-01 Golf Van Jeep Golf1 Van1 Jeep1
2018-01-02 Golf Van Jeep Golf2 Van2 Jeep2