Вы можете поместить его во внутренний список понимания:
arr = [[(i*n+j) for i in range(n) if ( 2*i<=j+i+1<=n+1 and i>0)] for j in range(n)]
Выход:
n = 10 # for example
print(arr)
[[10],
[11, 21],
[12, 22, 32],
[13, 23, 33, 43],
[14, 24, 34, 44, 54],
[15, 25, 35, 45, 55],
[16, 26, 36, 46],
[17, 27, 37],
[18, 28],
[19]]
EDIT:
Если вы хотите его в DataFrame с желаемым выводом:
import numpy as np
import pandas as pd
n = 10
arr = [[np.NaN] + [(i*n+j) for i in range(n) if ( 2*i<=j+i+1<=n+1 and i>0)] + [np.NaN] * (n - j - 2) for j in range(n)]
pd.DataFrame(arr)
0 1 2 3 4 5 6 7 8 9
0 NaN 10 NaN NaN NaN NaN NaN NaN NaN NaN
1 NaN 11 21.0 NaN NaN NaN NaN NaN NaN NaN
2 NaN 12 22.0 32.0 NaN NaN NaN NaN NaN NaN
3 NaN 13 23.0 33.0 43.0 NaN NaN NaN NaN NaN
4 NaN 14 24.0 34.0 44.0 54.0 NaN NaN NaN NaN
5 NaN 15 25.0 35.0 45.0 55.0 NaN NaN NaN NaN
6 NaN 16 26.0 36.0 46.0 NaN NaN NaN NaN NaN
7 NaN 17 27.0 37.0 NaN NaN NaN NaN NaN NaN
8 NaN 18 28.0 NaN NaN NaN NaN NaN NaN NaN
9 NaN 19 NaN NaN NaN NaN NaN NaN NaN NaN