我有一个包含唯一值的排序列表,该列表是从主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值以更好地格式化输出。
答案 0 :(得分:0)
您可以尝试这样的事情:
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)
答案 1 :(得分:0)
您可以尝试以下方法:
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
。
答案 2 :(得分:0)
这也将起作用:
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'])
答案 3 :(得分:0)
您可以创建一个映射(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]])