具有一个数据框,例如:
myFrame = pd.DataFrame(np.random.randint(1000, size=[7,4]),
index=[['GER','GER','GER','GER','FRA','FRA','FRA'],
['Phone','Email','Chat','Other','Phone','Chat','Email']])
0 1 2 3
GER Phone 765 876 588 933
Email 819 364 42 73
Chat 954 665 317 918
Other 692 531 312 206
FRA Phone 272 261 426 270
Chat 158 172 347 902
Email 453 721 67 6
如何轻松添加内部级别的缺失索引?例如。您会看到GER具有“其他”索引标签。我想将“其他”添加到所有国家/地区,并用例如0.可能有第三个外部索引(例如ITA),但可以找到另一个内部索引(例如SMS)。
最后,所有国家/地区的索引数量应完全相同。
谢谢!
答案 0 :(得分:3)
将reindex
与MultiIndex.from_product
创建的unique
一起使用,MultiIndex.get_level_values
生成的每个级别的值:
mux = pd.MultiIndex.from_product([myFrame.index.get_level_values(0).unique(),
myFrame.index.get_level_values(1).unique()])
print (myFrame.reindex(mux, fill_value=0))
0 1 2 3
GER Phone 250 614 226 777
Email 917 156 148 902
Chat 537 665 87 75
Other 431 203 921 572
FRA Phone 159 790 646 810
Email 294 205 949 726
Chat 209 895 128 282
Other 0 0 0 0
排序为unstack
和stack
-MultiIndex
的另一种解决方案:
print (myFrame.unstack(fill_value=0).stack(dropna=False))
0 1 2 3
FRA Chat 209 895 128 282
Email 294 205 949 726
Other 0 0 0 0
Phone 159 790 646 810
GER Chat 537 665 87 75
Email 917 156 148 902
Other 431 203 921 572
Phone 250 614 226 777