2017-05-16 6 views
1

私は、次のDFを持っている、と私は、列名の上にフィルタを適用したいと単に特定の文字列で始まるものが残る:フィルタリング列

これは私の現在でありますDF:

ruta2: 
      Current SAN Prev.1m SAN Prev.2m SAN Prev.3m SAN Current TRE \ 

A     5   6   7   6   3 
B     6   5   7   6   6 
C     12   11   11   11   8 

は基本的に私が望むどのようなデータフレームをフィルタリングし、Currentで始まる列のままにして。

その後、所望の出力は次のようになります。

ruta2: 
      Current SAN Current TRE 

A     5   3 
B     6   6 
C     12   8 

これを行うために、私は、このフィルタを試してみましたが、値がエラーを出力します

ruta2=ruta2[~(ruta2.columns.str[:4].str.startswith('Prev'))] 

答えて

1

あなたが唯一必要なようだ:

ruta2=ruta2.loc[:, ~(ruta2.columns.str[:4].str.startswith('Prev'))] 
#same as 
#ruta2=ruta2.loc[:, ~ruta2.columns.str.startswith('Prev')] 
print (ruta2) 
    Current SAN Current TRE 
A   5   3 
B   6   6 
C   12   8 

または

cols = ruta2.columns[ ~(ruta2.columns.str[:4].str.startswith('Prev'))] 
ruta2=ruta2[cols] 
print (ruta2) 
    Current SAN Current TRE 
A   5   3 
B   6   6 
C   12   8 

しかし、唯一のCurrent列を必要とする(^は正規表現で文字列の先頭を意味する)filterを使用する場合:

ruta2=ruta2.filter(regex='^Current') 
print (ruta2) 
    Current SAN Current TRE 
A   5   3 
B   6   6 
C   12   8 
0
#filter the columns names starting with 'Current' 
ruta2[[e for e in ruta2.columns if e.startswith('Current')]] 
Out[383]: 
    Current SAN Current TRE 
A   5   3 
B   6   6 
C   12   8 

それとも、列をフィルタリングするためにマスク配列を使用することができます。

ruta2.loc[:,ruta2.columns.str.startswith('Current')] 
Out[385]: 
    Current SAN Current TRE 
A   5   3 
B   6   6 
C   12   8 
関連する問題