Python 如何使用MultiIndex.from_产品重新编制索引?

Python 如何使用MultiIndex.from_产品重新编制索引?,python,pandas,Python,Pandas,来源数据: data = pandas.DataFrame( [["bainuo","pay",2418,2811,0], ["ctrip_distributor","pay",468,613,0], ["bainuo","refund",855,1001,231], ["ctrip_distributor","refund",195,264,55], ["dianpinghotel","refund",53,60,52], ["bainuo","check_in",1705,1888,184]

来源数据:

data = pandas.DataFrame(
[["bainuo","pay",2418,2811,0],
["ctrip_distributor","pay",468,613,0],
["bainuo","refund",855,1001,231],
["ctrip_distributor","refund",195,264,55],
["dianpinghotel","refund",53,60,52],
["bainuo","check_in",1705,1888,184],
["ctrip_distributor","check_in",264,313,73],
["dianpinghotel","check_in",5,5,4]],columns=["partner","state","oid","quantity","roomnight"])
我想:

data = pandas.pivot_table(data,values=['oid','quantity','roomnight'],index=['partner'],columns=['state'])
data = data.reorder_levels([1,0],axis=1).reindex(columns=['oid','quantity','roomnight'],level=1).reindex(columns=['pay','refund','check_in'],level=0).fillna(0)
它是有效的 但当我尝试另一种方式时:

data = pandas.pivot_table(data,values=['oid','quantity','roomnight'],index=['partner'],columns=['state'])
idx = pandas.MultiIndex.from_product([['pay','refund','check_in'],['oid','quantity','roomnight']])
data = data.reindex(columns=idx)

结果是错误的

在第二种情况下,首先需要执行
.reorder_levels([1,0],axis=1)
,然后使用多索引重新编制索引:

data.reorder_levels([1,0],axis=1).reindex(columns=idx)

原因是,
reindex
无法交换级别,它只会尝试匹配级别内的标签,因此您会得到所有的NAN。

但是它们是根本不同的方法,在成功的版本中,您创建了一个透视表,并在透视后重新排序级别,在第二个示例中,您正在对数据重新编制索引,并且与列的数据关系不存在,因此您将获得所有
NaN
s@EdChum很抱歉,有笔误,请再次查看,谢谢您首先需要执行此操作
。在第二种情况下,重新排序\u级别([1,0],axis=1)
,然后带多索引的
reindex
将起作用(reindex无法交换级别,它将尝试匹配级别内的标签,因此您将获得所有NaN)@joris为什么不将其转换为答案?@joris哦!非常感谢