2017-02-27 3 views
2

次のように私は、データフレームを持っている:パンダSTARTSWITH複数のオプション

<A> "B" C _:D <E> 
    A  B "C" <D> E> 
<A> "B" "C"  D <E> 

私は「<」または「"」またはで始まるどの要素をチェックします方法を見つけるためにしようとしています『_』とリターンをデータフレームを次のように

1  1  0  1  1 
    0  0  1  1  0 
    1  1  1  0  1 

を伴うデータフレームの大きさに、適用使用せず 次のように理想的には私の最後のデータフレームは、次のようになります。

<A> "B" C _:D <E> 4 
    A  B "C" <D> E> 2 
<A> "B" "C"  D <E> 4 

はありがとう

答えて

7

UPDATE:

がどのように、元のデータフレームにスタック+アンスタックで見つかっ1S の合計を含む列を追加するには?

In [59]: df['new'] = df.stack().str.contains(r'^(?:\"|<|_:)').astype(np.uint8).sum(level=0) 

In [60]: df 
Out[60]: 
    0 1 2 3 4 new 
0 <A> "B" C _:D <E> 4 
1 A B "C" <D> E> 2 
2 A< B" C" D E< 0 # pay attention at this row 

旧答え:

これを試してみてください。

df.apply(lambda col: col.str.contains(r'^\"|<|_:').astype(np.uint8)) 

デモ:

In [33]: df.apply(lambda col: col.str.contains(r'^\"|<|_:').astype(np.uint8)) 
Out[33]: 
    0 1 2 3 4 
0 1 1 0 1 1 
1 0 0 1 1 0 
2 1 1 1 0 1 

それともstack() + unstack()を使用した:

In [36]: df.stack().str.contains(r'^\"|<|_:').astype(np.uint8).unstack() 
Out[36]: 
    0 1 2 3 4 
0 1 1 0 1 1 
1 0 0 1 1 0 
2 1 1 1 0 1 
+0

Thx @MaxU私は、私が適用せずにそれをやろうとしていると言及するように私の質問を更新しました。 – Kelaref

+2

@Kelaref、私は私の答えを更新しました...あなたの実際のDFにはいくつのカラムがありますか? – MaxU

+0

@Kelaref MaxUの 'stack() - > unstack()'アプローチよりもずっと速くなるとは思わない。 – miradulo