Как создать датафрейм

Как создать dataframe res из a, если каждый [ ] в a это столбец с названием 1,2,3 (но может быть и больше), а кол-во строк 40. Пропуски заполнены np.nan, к примеру значение 25 должно лежать по индексу 24. 15 на индексе 14, если 7 то на 6 и тп.

a = [ [7, 25, 29], [1, 14, 15, 27], [0, 10, 15] ]


Ответы (3 шт):

Автор решения: Namerek
import pandas as pd
from itertools import zip_longest

a = [
    [7, 25, 29],
    [1, 14, 15, 27],
    [0, 10, 15]
]

res = pd.DataFrame(
    dict(
        [
            *enumerate(
                zip(
                    *zip_longest(
                        *a,
                        fillvalue=None
                    )
                ),
                start=1
            )
        ]
    )
)
print(res)

output

      1   2     3
0   7.0   1   0.0
1  25.0  14  10.0
2  29.0  15  15.0
3   NaN  27   NaN
→ Ссылка
Автор решения: strawdog

Можно попробовать так:

import pandas as pd

a = [ [7, 25, 29], [1, 14, 15, 27], [0, 10, 15] ]
n = 40

res = pd.DataFrame(index=list(range(0,n)))
for i in range(len(a)):
    res = res.join(pd.DataFrame(a[i], index=[x-1 for x in a[i]], columns=[i+1]))

res:

       1     2     3
0    NaN   1.0   NaN
1    NaN   NaN   NaN
2    NaN   NaN   NaN
3    NaN   NaN   NaN
4    NaN   NaN   NaN
5    NaN   NaN   NaN
6    7.0   NaN   NaN
7    NaN   NaN   NaN
8    NaN   NaN   NaN
9    NaN   NaN  10.0
10   NaN   NaN   NaN
11   NaN   NaN   NaN
12   NaN   NaN   NaN
13   NaN  14.0   NaN
14   NaN  15.0  15.0
15   NaN   NaN   NaN
16   NaN   NaN   NaN
17   NaN   NaN   NaN
18   NaN   NaN   NaN
19   NaN   NaN   NaN
20   NaN   NaN   NaN
21   NaN   NaN   NaN
22   NaN   NaN   NaN
23   NaN   NaN   NaN
24  25.0   NaN   NaN
25   NaN   NaN   NaN
26   NaN  27.0   NaN
27   NaN   NaN   NaN
28  29.0   NaN   NaN
29   NaN   NaN   NaN
30   NaN   NaN   NaN
31   NaN   NaN   NaN
32   NaN   NaN   NaN
33   NaN   NaN   NaN
34   NaN   NaN   NaN
35   NaN   NaN   NaN
36   NaN   NaN   NaN
37   NaN   NaN   NaN
38   NaN   NaN   NaN
39   NaN   NaN   NaN​
→ Ссылка
Автор решения: SergFSM

попробуйте еще такой вариант:

res = (pd.concat([pd.Series(i, index=i) for i in a], axis=1).
       reindex(range(n)).
       set_axis(range(1, len(a)+1), axis=1).
       shift(-1))
'''
       1     2     3
0    NaN   1.0   NaN
1    NaN   NaN   NaN
2    NaN   NaN   NaN
3    NaN   NaN   NaN
4    NaN   NaN   NaN
5    NaN   NaN   NaN
6    7.0   NaN   NaN
7    NaN   NaN   NaN
8    NaN   NaN   NaN
9    NaN   NaN  10.0
10   NaN   NaN   NaN
11   NaN   NaN   NaN
12   NaN   NaN   NaN
13   NaN  14.0   NaN
14   NaN  15.0  15.0
15   NaN   NaN   NaN
16   NaN   NaN   NaN
17   NaN   NaN   NaN
18   NaN   NaN   NaN
19   NaN   NaN   NaN
20   NaN   NaN   NaN
21   NaN   NaN   NaN
22   NaN   NaN   NaN
23   NaN   NaN   NaN
24  25.0   NaN   NaN
25   NaN   NaN   NaN
26   NaN  27.0   NaN
27   NaN   NaN   NaN
28  29.0   NaN   NaN
29   NaN   NaN   NaN
30   NaN   NaN   NaN
31   NaN   NaN   NaN
32   NaN   NaN   NaN
33   NaN   NaN   NaN
34   NaN   NaN   NaN
35   NaN   NaN   NaN
36   NaN   NaN   NaN
37   NaN   NaN   NaN
38   NaN   NaN   NaN
39   NaN   NaN   NaN
→ Ссылка