我有两个列表。一个有一个ID(某些子图),另一个有每个子图的出现频率(一些值)。每个列表是一个列表列表(具有不同的大小),我想创建一个数据框,每个子图的ID为一个柱状。之后,我想为id列表的每一行检查值列表中的相关值,并将此值保存在相关的dataframe列中。 更详细地说,我有以下两个列表:
*id_graph=[[1,2,3,4],[1,2],[1,2,3],[1,4]]
value_graph=[[11,22,33,44],[11,1],[122,9,1],[1,14]]*
我想要输出一个数据帧,例如:
1 2 3 4
0 11.0 22.0 33.0 44.0
1 11.0 1.0 NaN NaN
2 122.0 9.0 1.0 NaN
3 1.0 NaN NaN 14.0
首先,我用所需的列名称创建了一个空的df 之后,我使用一个循环来定义df不同的行,并使用两个for循环和zip将值保存到dataframe
*import pandas as pd
a=[1,2,3,4]
a=list(a)
df=pd.DataFrame(columns=a)
id_graph=[[1,2,3,4],[1,2],[1,2,3],[1,4]]
value_graph=[[11,22,33,44],[11,1],[122,9,1],[1,14]]
for row in range(0,len(id_graph)):
for a, b in zip(id_graph, value_graph):
for i,j in zip(a,b):
df.loc[row,i]=j
print("row:",row,"id:",i,"value:",j)*
所以尽管我想要输出df之类的东西,
1 2 3 4
0 11.0 22.0 33.0 44.0
1 11.0 1.0 NaN NaN
2 122.0 9.0 1.0 NaN
3 1.0 NaN NaN 14.0
我的输出是:
1 2 3 4
0 1.0 9.0 1.0 14.0
1 1.0 9.0 1.0 14.0
2 1.0 9.0 1.0 14.0
3 1.0 9.0 1.0 14.0
答案 0 :(得分:0)
这是一种方法,但是我可以想象有一些更平滑的东西。例如,我创建df时假设您知道您将拥有多少列。
import pandas as pd
a=[1,2,3,4]
a=list(a)
df=pd.DataFrame(columns=a)
id_graph=[[1,2,3,4],[1,2],[1,2,3],[1,4]]
value_graph=[[11,22,33,44],[11,1],[122,9,1],[1,14]]
df=pd.DataFrame(columns=[1,2,3,4])
i=0
for id_, value in zip(id_graph, value_graph):
for n, val in zip(id_,value):
df.loc[i,n]=val
i+=1