Как лучше всего вставить значения NaN в список Python, ссылаясь на уже отсортированный список - PullRequest
0 голосов
/ 11 октября 2018

У меня есть отсортированный список, содержащий уникальные значения, которые получены из основного списка значений 2d:

Sorted_List = [1,2,3,4]

Master_List =
[[1],
[1,2],
[1,4],
[3]]

Я хочу использовать отсортированный список и преобразовать основной список в:

Converted_Master_List :
[[1,NaN,NaN,NaN],
[1,2,NaN,NaN],
[1,NaN,NaN,4],
[NaN,NaN,3,NaN]]

Как мне лучше всего это сделать.

В конечном итоге мне нужно записать это в файл CSV / excel.

Я уже написал код для выполнения сортировки из основного списка и записалвывод в файл CSV, необходимо заполнить значения NaN между ними, чтобы лучше отформатировать вывод.

Ответы [ 4 ]

0 голосов
/ 11 октября 2018

Вы можете создать отображение (val -> idx), где val - это значение из вашего отсортированного списка, а idx - это индекс значения и использовать черную магию numpy:

In [62]: sorted_list = [1, 2, 3, 4]

In [63]: master_list = [[1], [1, 2], [1, 4], [3]]

In [64]: inverted_sorted_list = pd.Series(range(len(sorted_list)), index=sorted_list)

In [65]: converted_master_list = np.full((len(master_list), len(sorted_list)), np.nan)

In [66]: for idx, lst in enumerate(master_list):
    ...:     converted_master_list[idx][inverted_sorted_list[lst]] = lst
    ...:

In [67]: converted_master_list
Out[67]:
array([[ 1., nan, nan, nan],
       [ 1.,  2., nan, nan],
       [ 1., nan, nan,  4.],
       [nan, nan,  3., nan]])
0 голосов
/ 11 октября 2018

Вы можете попробовать это:

import numpy as np

sorted_list = [1, 2, 3, 4]
master_list = [[1], [1, 2], [1, 4], [3]]

# get rows and columns
rows, columns = len(master_list), max(map(max, master_list))

# create an array of rows by columns filled with np.nan
converted_master_list = np.empty((rows, columns))
converted_master_list[:] = np.nan

# set the values of the indices
for i, indices in enumerate(master_list):
    for j in indices:
        converted_master_list[i, j - 1] = j

print(converted_master_list)

Вывод

[[ 1. nan nan nan]
 [ 1.  2. nan nan]
 [ 1. nan nan  4.]
 [nan nan  3. nan]]

Примечание: Этот подход не использует sorted_list какНасколько я понял, тебе это не нужно.

0 голосов
/ 11 октября 2018

Это также будет работать:

Master_List =[[1],[1,2],[1,4],[3]]
Sorted_List = [1,2,3,4]
i = len(Sorted_List)

for my_list in Master_List:
    if len(my_list)!= i:
        a = i - len(my_list)
        my_list.extend(a * ['nan'])
0 голосов
/ 11 октября 2018

Вы можете попробовать что-то вроде этого:

Sorted_List = [1,2,3,4]

Master_List =
[[1],
[1,2],
[1,4],
[3]]

Converted_Master_List = []
for part in Master_List:
    new_part = [NaN] * len(Sorted_List)
    for i in range(len(Sorted_List)):
        if Sorted_List[i] in part:
           new_part[i] = Sorted_List[i]
    Converted_Master_List.append(new_part)
...