title: Efficiently processing DataFrame rows with a Python function?
body: <p>In many places in our Pandas-using code, we have some Python function <code>process(row)</code>. That function is used over <code>DataFrame.iterrows()</code>, taking each <code>row</code>, and doing some processing, and returning a value, which we ultimate collect into a new <code>Series</code>.</p>
  
  <p>I realize this usage pattern circumvents most of the performance benefits of the numpy / Pandas stack.</p>
  
  <ol>
  <li>What would be the best way to make this usage pattern as efficient
  as possible?</li>
  <li>Can we possibly do it without rewriting most of our code?</li>
  </ol>
  
  <p>Another aspect of this question: can all such functions be converted to a numpy-efficient representation?  I've much to learn about the numpy / scipy / Pandas stack, but it seems that for truly arbitrary logic, you may sometimes need to just use a slow pure Python architecture like the one above. Is that the case?</p>