How do I operate on a DataFrame with a Series for every column : <h2>Objective and Motivation</h2>

<p>I've seen this kind of question several times over and have seen many other questions that involve some element of this.  Most recently, I had to spend a bit of time explaining this concept in comments while looking for an appropriate canonical Q&amp;A.  I did not find one and so I thought I'd write one.</p>

<p>This question usually arises with respect to a specific operation but equally applies to most arithmetic operations.</p>

<ul>
<li>How do I subtract a <code>Series</code> from every column in a <code>DataFrame</code>?</li>
<li>How do I add a <code>Series</code> from every column in a <code>DataFrame</code>?</li>
<li>How do I multiply a <code>Series</code> from every column in a <code>DataFrame</code>?</li>
<li>How do I divide a <code>Series</code> from every column in a <code>DataFrame</code>?</li>
</ul>

<h2>The Question</h2>

<p>Given a <code>Series</code> <code>s</code> and <code>DataFrame</code> <code>df</code>.  How do I operate on each column of <code>df</code> with <code>s</code>?</p>

<pre><code>df = pd.DataFrame(
    [[1, 2, 3], [4, 5, 6]],
    index=[0, 1],
    columns=['a', 'b', 'c']
)

s = pd.Series([3, 14], index=[0, 1])
</code></pre>

<p>When I attempt to add them, I get all <code>np.nan</code></p>

<pre><code>df + s

    a   b   c   0   1
0 NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN
</code></pre>

<p>What I thought I should get is</p>

<pre><code>    a   b   c
0   4   5   6
1  18  19  20
</code></pre>
