Отрицательные числа датафрейм

Делаю датафрейм из списка a, но положительные числа записываются в датафрейм, а отрицательные нет - как исправить?

n = 10

a = [[1,5,-6,8,9],[-2,-6,-7,-8],[0,3,4,5,-6,-7,-8]]

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

введите сюда описание изображения


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

Автор решения: strawdog

узнаЮ свой ответ...

Вам нужно понять, как работает метод join и его параметр index - в данном случае индекс значения берется равным самому значению. соответственно, значения с отрицательным индексом отпадают. поэтому берите индекс по абсолютному значению.

for i in range(len(a)):
    res = res.join(pd.DataFrame(a[i], index=[abs(x) for x in a[i]], columns=[i])) 

res:

     0    1    2
0  NaN  NaN  0.0
1  1.0  NaN  NaN
2  NaN -2.0  NaN
3  NaN  NaN  3.0
4  NaN  NaN  4.0
5  5.0  NaN  5.0
6 -6.0 -6.0 -6.0
7  NaN -7.0 -7.0
8  8.0 -8.0 -8.0
9  9.0  NaN  NaN
→ Ссылка
Автор решения: SergFSM

чтобы отрицательные числа добавить с соответствующим индексом можно попробовать такой код:

res = pd.concat([pd.Series(j,j,name=i) for i,j in enumerate(a)],1)
print(res)
'''
      0    1    2
-8  NaN -8.0 -8.0
-7  NaN -7.0 -7.0
-6 -6.0 -6.0 -6.0
-2  NaN -2.0  NaN
 0  NaN  NaN  0.0
 1  1.0  NaN  NaN
 3  NaN  NaN  3.0
 4  NaN  NaN  4.0
 5  5.0  NaN  5.0
 8  8.0  NaN  NaN
 9  9.0  NaN  NaN
→ Ссылка