title: How do you forward fill in pandas within a group?
body: <p>I have a pandas DataFrame of the form</p>
  <div class="s-table-container">
  <table class="s-table">
  <thead>
  <tr>
  <th style="text-align: left;">quarter</th>
  <th style="text-align: right;">user_id</th>
  <th style="text-align: right;"># Sessions</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td style="text-align: left;">2022 Q1</td>
  <td style="text-align: right;">1</td>
  <td style="text-align: right;">9</td>
  </tr>
  <tr>
  <td style="text-align: left;">2021 Q4</td>
  <td style="text-align: right;">1</td>
  <td style="text-align: right;"></td>
  </tr>
  <tr>
  <td style="text-align: left;">2021 Q3</td>
  <td style="text-align: right;">1</td>
  <td style="text-align: right;"></td>
  </tr>
  <tr>
  <td style="text-align: left;">2022 Q1</td>
  <td style="text-align: right;">2</td>
  <td style="text-align: right;">8</td>
  </tr>
  <tr>
  <td style="text-align: left;">2021 Q4</td>
  <td style="text-align: right;">2</td>
  <td style="text-align: right;"></td>
  </tr>
  <tr>
  <td style="text-align: left;">2021 Q3</td>
  <td style="text-align: right;">2</td>
  <td style="text-align: right;"></td>
  </tr>
  </tbody>
  </table>
  </div>
  <p>And I'd like to forward fill the # Sessions column within each user_id to get a table like:</p>
  <div class="s-table-container">
  <table class="s-table">
  <thead>
  <tr>
  <th style="text-align: left;">quarter</th>
  <th style="text-align: right;">user_id</th>
  <th style="text-align: right;"># Sessions</th>
  </tr>
  </thead>
  <tbody>
  <tr>
  <td style="text-align: left;">2022 Q1</td>
  <td style="text-align: right;">1</td>
  <td style="text-align: right;">9</td>
  </tr>
  <tr>
  <td style="text-align: left;">2021 Q4</td>
  <td style="text-align: right;">1</td>
  <td style="text-align: right;">9</td>
  </tr>
  <tr>
  <td style="text-align: left;">2021 Q3</td>
  <td style="text-align: right;">1</td>
  <td style="text-align: right;">9</td>
  </tr>
  <tr>
  <td style="text-align: left;">2022 Q1</td>
  <td style="text-align: right;">2</td>
  <td style="text-align: right;">8</td>
  </tr>
  <tr>
  <td style="text-align: left;">2021 Q4</td>
  <td style="text-align: right;">2</td>
  <td style="text-align: right;">8</td>
  </tr>
  <tr>
  <td style="text-align: left;">2021 Q3</td>
  <td style="text-align: right;">2</td>
  <td style="text-align: right;">8</td>
  </tr>
  </tbody>
  </table>
  </div>
  <p>I can do this with</p>
  <pre class="lang-py prettyprint-override"><code>x.groupby('user_id').apply(lambda x: x.fillna({'# Sessions': x['# Sessions'].ffill()}))
  </code></pre>
  <p>But I have reasonably big data (~10k users), and this is a very common operation in the codebase.</p>
  <p>Is <code>.groupby</code> necessary or is there a more performant way to achieve the same?</p>