如何最好地通过引用已排序的列表在Python列表中插入NaN值

如何最好地通过引用已排序的列表在Python列表中插入NaN值,python,numpy,python-3.6,Python,Numpy,Python 3.6,我有一个排序列表,其中包含从主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文件 我已经编写了从主列表进行

我有一个排序列表,其中包含从主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值以更好地格式化输出

您可以尝试以下方法:

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)
你可以试试这个:

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]]
注意: 据我所知,这种方法不使用排序列表。

这也适用于:

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'])

您可以创建映射
(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]])

你的目标到底是什么?您描述它的唯一方法是使用示例。到目前为止你都试了些什么?这个问题是下面问题的延续:这个问题似乎没有告诉我多少。请编辑您的问题,以便更好地指定您的目标,并包括您迄今为止尝试过的内容。@Quelklef:这不是家庭作业问题。这个问题是以下问题的继续:我想观察从传感器获得的数据中的模式。这些数字实际上是我从传感器获得的数据中的峰值。当然,但是这个链接并不能帮助我准确地理解你的目标。您是否试图将主列表的子列表转换为
范围(1,5)
,其中缺少的元素是
NaN