This is still similar to how it was done in Drupal 7 and Drupal 6 with the use of colspan or rowspan attributes. The documentation for template_preprocess_table states
Each cell can be either a string or an associative array with the
following keys:
- data: The string or render array to display in the table cell.
- header: Indicates this cell is a header.
- Any HTML attributes, such as "colspan", to apply to the table cell.
So the top row of your example image would be like such:
$rows = [
[
['data' => '', 'attributes' => ['rowspan' => 3]],
'',
'',
'',
],
['', '', ''],
['', '', ''],
];
in order to get the following HTML:
<tr>
<td rowspan="3"></td>
<td></td>
<td></td>
<tD></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>