我的案件与到目前为止在网上发现的案件略有不同。我想在页眉中旋转具有特定级别的熊猫数据框。ivot_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
您可以使用set_index
+unstack
进行重塑,然后swaplevel
在MultiIndex
列,并通过最后的排序它们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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句