title: Check if at least one column contains a string in pandas
body: <p>I would like to check whether several columns contain a string, and generate a Boolean column with the result. This is easy to do for a single column, but generates an Attribute Error (<code>AttributeError: 'DataFrame' object has no attribute 'str'</code>) when this method is applied to multiple columns.</p>
  <p>Example:</p>
  <pre><code>import pandas as pd
  
  c1=[x+'x' for x in 'abcabc']
  c2=['Y'+x+'m' for x in 'CABABC']
  cols=['A','B']
  
  df=pd.DataFrame(list(zip(c1,c2)),columns=cols)
  df
  </code></pre>
  <p>Returns:</p>
  <pre><code>    A   B
  0   ax  YCm
  1   bx  YAm
  2   cx  YBm
  3   ax  YAm
  4   bx  YBm
  5   cx  YCm
  </code></pre>
  <p>The following code works when applied to a single column, but does not work when applied to several columns. I'd like something that fits in here and gives the desired result:</p>
  <pre><code>df['C']=df[cols].str.contains('c',case=False)
  </code></pre>
  <p>Thus the desired output is:</p>
  <pre><code>    A   B   C
  0   ax  YCm True
  1   bx  YAm False
  2   cx  YBm True
  3   ax  YAm False
  4   bx  YBm False
  5   cx  YCm True
  </code></pre>
  <p>Edit: I updated my example to reflect the desire to actually search for whether the column &quot;contains&quot; a value, rather than &quot;is equivalent to&quot; that value.</p>
  <p>Edit: in terms of timings, here's the benchmark I'd like to be able to match or beat, without creating the new columns (using a <code>*1000</code> to the columns in my toy example):</p>
  <pre><code>newcols=['temp_'+x for x in cols]
  
  for col in cols:
      df['temp_'+col]=df[col].str.contains('c',case=False)
  
  df['C']=df[newcols].any(axis=1)
  df=df[['A','B','C']]
  </code></pre>