2017-02-21 2 views
0

2つのレベルの見出しを持つ奇妙なデータフレームがあります。最初のレベルは列見出しを構成し、2番目のレベルはデータフレームの最初の行を構成します。このように:データフレームの最初の行の異なる値に基づいて複数の列を削除する

 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 

第2レベルのヘッダー(つまり、行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にApplesPearsで列を削除します。現在の見出しを失いたくないので、行0を新しい列見出しセットに昇格させたくありません。

これを行う簡単な方法はありますか?

ブールマスクを選択するには、最初の行に使用 ilocのために、( ~)と isinを反転させることにより作成され、 locboolean indexingを使用することができます

答えて

1

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

関連する問題