我的情况与我迄今为止在网上发现的情况略有不同。我想在标题中使用特定级别来转动pandas数据帧。 pivot_table函数要求值为数字,pandas.pivot函数似乎没有完全符合我的要求。
这是起始代码。
import pandas as pd
df = pd.DataFrame({'session':['2017', '2018','2017','2018','2017','2018'], 'domain':['network', 'network', 'facility', 'facility', 'access', 'access'], 'vendor':['vendorA', 'vendorA', 'vendorB','vendorB','vendorB','vendorB'], 'cost':[10,20,30,40,50,60]})
print df.to_string()
cost domain session vendor
0 10 network 2017 vendorA
1 20 network 2018 vendorA
2 30 facility 2017 vendorB
3 40 facility 2018 vendorB
4 50 access 2017 vendorB
5 60 access 2018 vendorB
我所追求的是类似的东西,第一列级别只有'域'值,第二列级别'供应商'和'成本'对于每个域'会话':
domain network facility access
session vendor cost vendor cost vendor cost
2017 vendorA 10 vendorB 30 vendorB 50
2018 vendorA 20 vendorB 40 vendorB 60
答案 0 :(得分:1)
您可以使用set_index
+ unstack
进行重塑,然后使用MultiIndex
中的swaplevel
列,最后按sort_index
排序:
df1 = df.set_index(['session','domain'])
.unstack()
.swaplevel(0,1,1)
.sort_index(1, ascending=False)
print (df1)
domain network facility access
vendor cost vendor cost vendor cost
session
2017 vendorA 10 vendorB 30 vendorB 50
2018 vendorA 20 vendorB 40 vendorB 60
或者使用pivot
:
df1 = df.pivot(index='session',columns='domain')
.swaplevel(0,1,1)
.sort_index(1, ascending=False)
print (df1)
domain network facility access
vendor cost vendor cost vendor cost
session
2017 vendorA 10 vendorB 30 vendorB 50
2018 vendorA 20 vendorB 40 vendorB 60