Вам просто нужно установить одинаковую ширину для каждого поля (кнопки). А поскольку btn-group > .btn
имеет flex: 1 1 auto;
, что означает, что они будут сжиматься при необходимости, вы можете безопасно установить для каждой кнопки ширину 50% или 100%:
<div class="btn-group-vertical ml-4 mt-4">
<div class="btn-group">
<input class="text-center form-control-lg mb-2" id="code">
</div>
<div class="btn-group">
<button type="button" class="btn btn-outline-secondary py-3 w-100">1</button>
<button type="button" class="btn btn-outline-secondary py-3 w-100">2</button>
<button type="button" class="btn btn-outline-secondary py-3 w-100">3</button>
</div>
<div class="btn-group">
<button type="button" class="btn btn-outline-secondary py-3 w-100">4</button>
<button type="button" class="btn btn-outline-secondary py-3 w-100">5</button>
<button type="button" class="btn btn-outline-secondary py-3 w-100">6</button>
</div>
<div class="btn-group">
<button type="button" class="btn btn-outline-secondary py-3 w-100">7</button>
<button type="button" class="btn btn-outline-secondary py-3 w-100">8</button>
<button type="button" class="btn btn-outline-secondary py-3 w-100">9</button>
</div>
<div class="btn-group">
<button type="button" class="btn btn-outline-secondary py-3 w-100"><</button>
<button type="button" class="btn btn-outline-secondary py-3 w-100">0</button>
<button type="button" class="btn btn-primary py-3 w-100" onclick="">Go</button>
</div>
</div>
demo: https://jsfiddle.net/davidliang2008/dmch1590/16/
Если вы посмотрите на Bootstrap 4.1.3, то от 4.5.0 он отличается тем, что имеет:
.btn-group-vertical .btn {
width: 100%;
}