2016-08-15 53 views
3

我以下的數據幀(在實際數據幀是比這一個更大):如何使用數據透視表熊貓後襬脫多級索引?

sale_user_id sale_product_id count 
1     1    1 
1     8    1 
1     52    1 
1     312   5 
1     315   1 

然後重塑它在sale_product_id移動值使用下面的代碼列標題:

reshaped_df=id_product_count.pivot(index='sale_user_id',columns='sale_product_id',values='count') 

所得數據幀是:

sale_product_id -1057 1 2 3 4 5 6 8 9 10 ... 98 980 981 982 983 984 985 986 987 99 
sale_user_id                      
1    NaN 1.0 NaN NaN NaN NaN NaN 1.0 NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
3    NaN 1.0 NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
4    NaN NaN 1.0 NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 

,你可以看到我們有一個multililevel指數,我需要的是擁有的F sale_user_is沒有多級索引IRST柱:

我採取如下方法:

reshaped_df.reset_index() 

的結果會是這樣,我仍然有sale_product_id列,但我並不需要它了:

sale_product_id sale_user_id -1057 1 2 3 4 5 6 8 9 ... 98 980 981 982 983 984 985 986 987 99 
0       1 NaN 1.0 NaN NaN NaN NaN NaN 1.0 NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
1       3 NaN 1.0 NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 
2       4 NaN NaN 1.0 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN 

我可以子集這個數據框來擺脫sale_product_id,但我不認爲它會有效。我正在尋找一種有效的方式來擺脫多級索引,同時重塑原始數據幀

回答

2

您需要刪除只index name,使用rename_axis(新中pandas0.18.0):

print (reshaped_df) 
sale_product_id 1 8 52 312 315 
sale_user_id        
1     1 1 1 5 1 

print (reshaped_df.index.name) 
sale_user_id 

print (reshaped_df.rename_axis(None)) 
sale_product_id 1 8 52 312 315 
1     1 1 1 5 1 

另一種解決方案在大熊貓工作如下0.18.0

reshaped_df.index.name = None 
print (reshaped_df) 

sale_product_id 1 8 52 312 315 
1     1 1 1 5 1 

如果需要刪除columns name也:

print (reshaped_df.columns.name) 
sale_product_id 

print (reshaped_df.rename_axis(None).rename_axis(None, axis=1)) 
    1 8 52 312 315 
1 1 1 1 5 1 

另一種解決方案:

reshaped_df.columns.name = None 
reshaped_df.index.name = None 
print (reshaped_df) 
    1 8 52 312 315 
1 1 1 1 5 1 

編輯的評論:

您需要reset_index與參數drop=True

reshaped_df = reshaped_df.reset_index(drop=True) 
print (reshaped_df) 
sale_product_id 1 8 52 312 315 
0     1 1 1 5 1 

#if need reset index nad remove column name 
reshaped_df = reshaped_df.reset_index(drop=True).rename_axis(None, axis=1) 
print (reshaped_df) 
    1 8 52 312 315 
0 1 1 1 5 1 

如果需要刪除僅列名:

reshaped_df = reshaped_df.rename_axis(None, axis=1) 
print (reshaped_df) 
       1 8 52 312 315 
sale_user_id       
1    1 1 1 5 1 

編輯1:

因此,如果需要從index創建新列和刪除columns names

reshaped_df = reshaped_df.rename_axis(None, axis=1).reset_index() 
print (reshaped_df) 
    sale_user_id 1 8 52 312 315 
0    1 1 1 1 5 1 
+0

我嘗試了所有的解決方案,actulally前兩個解決方案刪除sale_user_id,但我需要它作爲第一個欄,我需要擺脫sale_product_id。 – sanaz

+0

和最後兩個解決方案也刪除sale_user_id – sanaz

+0

請檢查我的編輯。 – jezrael