Pandas StartsWith有多种选择

时间:2017-02-27 15:11:29

标签: regex string pandas dataframe

我的数据框如下:

%token <str> NAME
%type  <number> expr

我正试图找到一种方法来检查哪些元素以&#39;&lt;&#39;或&#39;&#34;&#39;或&#39; _:&#39;并返回如下数据框:

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

由于数据帧的大小,不使用apply。 理想情况下,我的最终数据框如下:

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

谢谢

1 个答案:

答案 0 :(得分:7)

<强>更新

  

如何向原始数据帧添加包含1的总和的列   在堆栈中找到+ unstack?

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