2017-02-21 35 views
0

我有一個奇數的數據幀,它有兩個標題級別。第一級構成列標題,第二級構成數據框的第一行。像這樣:基於數據幀的第一行中的不同值刪除多列

 Fav-fruit Unnamed1  Unnamed2 Cost Purchsd? Unnamed3 
0 Apples  Bananas  Pears    Yes  No 
1 Apples        0.10    No 
2        Pears  0.30    No 
3 Apples        0.10 Yes 

我想根據第二級標題(即在第0行)刪除一組列。例如,與ApplesPears刪除列行0中得到這個:

 Fav-fruit Cost Purchsd? Unnamed3 
0 Pears    Yes  No 
1     0.10    No 
2 Pears  0.30    No 
3     0.10 Yes 

真正的數據幀有大約500列,我需要把它們的約60。我不想將第0行升級爲一組新的列標題,因爲我不想丟失當前的標題。

有沒有簡單的方法來做到這一點?

回答

1

您可以使用boolean indexingloc,布爾掩碼由反相(~)和isin創建的,選擇第一行使用iloc

mask = df.iloc[0].isin(['Apples','Pears']) 
print (mask) 
Fav-fruit  True 
Unnamed1  False 
Unnamed2  True 
Cost   False 
Purchsd?  False 
Unnamed3  False 
Name: 0, dtype: bool 

print (~mask) 
Fav-fruit False 
Unnamed1  True 
Unnamed2  False 
Cost   True 
Purchsd?  True 
Unnamed3  True 
Name: 0, dtype: bool 

print (df.loc[:, ~mask]) 
    Unnamed1 Cost Purchsd? Unnamed3 
0 Bananas NaN  Yes  No 
1  NaN 0.1  NaN  No 
2  NaN 0.3  NaN  No 
3  NaN 0.1  Yes  NaN 
+0

完美!這樣可行。 我很難得到我的頭部索引,但這個解釋真的有幫助。謝謝! – user4896331