将长度为n的列表的pandas数据帧有效地转换为n个数据帧

时间:2019-06-14 10:29:54

标签: python pandas dataframe

我有一个pandas数据框,其中每个元素都是3个浮点的列表或元组。

使用它并不是一件容易的事,但这是一个继承的要求。如何有效地将其转换为3个单独的数据帧(或n个浮点列表的n个数据帧)?

例如,df.iloc[0,0] == [0.23, 0.47, 0.89]中的元素,而我想生成df1.iloc[0,0] == 0.23df2.iloc[0,0] == 0.47df3.iloc[0,0] == 0.89

2 个答案:

答案 0 :(得分:1)

我会做这样的事情:

df1, df2, df3 = (df.apply(lambda s: s.apply(lambda l: l[i])) for i in range(3))

答案 1 :(得分:1)

您还可以尝试以下操作:

def unpack_df_to_dfs(df, num_elements):
    rowrange = range(0, len(df))
    elementrange = range(0, num_elements)
    lists = [ [[] for j in rowrange] for i in elementrange ]
    for j, row in enumerate(df.index):
        for col in df.columns:
             for i in elementrange:
                  lists[i][j].append(df.loc[row, col][i])
    return [pd.DataFrame(l) for l in lists] 

df1, df2, df3 = unpack_df_to_dfs(df, 3)

其中num_elements是数据框中的列表或元组中的元素数。