如何从多个列表/字典创建多个数据框

时间:2020-06-15 17:14:05

标签: python pandas dataframe dictionary for-loop

我有多个词典,这些词典基于相同的14组数据进行不同的度量/计算。每个字典具有相同的键集,由

定义
group_list =['A', 'B', 'C','D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N']

在此之前,我已经基于计算和操作其他字典+列表中的数据创建了字典。有问题的字典是

speed_dict
output_dict
output2_dict

这些是在for循环之外创建的,然后进行填充以提供类似于以下内容的输出

speed_dict = {'A': [list of speeds for A], 'B': [list of speeds for B]... etc for letters up to 'N':[list of speeds for N]}
output_dict = {'A': [output of function for A], 'B':[output of function for B].... 'N':[output of function for N]}
output2_dict = {'A':[output of func for A squared]....} 

我确定你知道图片。每个字典中每个值/列表的长度为8个项目。

我正在寻找一种方法,可以为从A到N的每组数据创建14个单独的数据帧,每列包含一个不同的数据集(我已经设法仅针对最后一组数据正确地产生了我想要的结果{ {3}}(速度称为速度,输出为升力系数),使用以下代码:

group_list = ['A', 'B', 'C','D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N']

speed_dict = {}
output_dict = {}
output_dict = {}
cl_dataframe = []

for i in range(0, len(group_list)):
    speed_dict.update({group_list[i]: constant*some_dict.get(group_list[i])})
    output_dict.update({group_list[i]: some_func(speed_dict.get(group_list[i]))})
    output2_dict.update({group_list[i]: (output_dict.get(group_list[i]))**2})

    output_dataframe.append({"Equivalent Velocity": list(speed_dict.get(group_list[i])),
                   "Lift Coefficient": list(output_dict.get(group_list[i])),
                   "Lift Coefficient Squared": list(output_dict.get(group_list[i]))})

pd.DataFrame(output_dataframe[i], columns=["Equivalent Velocity", "Lift Coefficient", "Lift Coefficient Squared"])

在最后一行,如果我拿走[i]而不是使用

pd.DataFrame(output_dataframe, columns=["Equivalent Velocity", "Lift Coefficient", "Lift Coefficient Squared"])

the last set of data only。如果我保留[i]并使行缩进,以使此过程发生在for循环内,则我不会从Python收到任何输出,也不会收到错误和表格。有没有一种方法可以创建14个单独的数据框,每个键/字母对应一个数据框,类似于I instead get this output上方提交的代码的数据框输出,其中每一列都是一个单独的字典? 谢谢

编辑:改写整个问题

1 个答案:

答案 0 :(得分:0)

group_list = ['A', 'B', 'C','D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N']

# dummy data
speed_dict = {a: np.random.randint(0,10,10) for a in group_list}
output_dict = {a: np.random.randint(0,10,10) for a in group_list}
output2_dict = {a: np.random.randint(0,10,10) for a in group_list}

# convert dict to dataframes
dataframes = [pd.DataFrame(d) for d in [speed_dict, output_dict, output2_dict]]

# extract respective column from all dataframes and combine in individual df
single_dataframes = [pd.concat([d[column] for d in dataframes], axis=1) for column in group_list]
#rename columns
for sdf in single_dataframes:
    sdf.columns=['Equivalent Velocity','Lift Coefficient', 'Lift Coefficient Squared']