gpt4 book ai didi

python - 从具有不同非整数索引的大小不等的列表对象创建数据帧

转载 作者:行者123 更新时间:2023-12-01 07:02:50 24 4
gpt4 key购买 nike

我有一个 numpy 数组列表 - 例如:

我们称之为 LIST_A:

[array([  0.        , -11.35190205,  11.35190205,   0.        ]),
array([ 0. , 36.58012599, -36.58012599, 0. ]),
array([ 0. , -41.94408202, 41.94408202, 0. ])]

我有一个列表列表,它们是上面 numpy 数组列表中每个 numpy 数组的索引:

我们称之为List_B:

[['A_A', 'A_B', 'B_A', 'B_B'],
['A_A', 'A_D', 'D_A', 'D_D'],
['B_B', 'B_C', 'C_B', 'C_C']]

我想从这些对象创建一个pandas dataframe,但我不知道如何在不首先为每个numpy arrays创建系列对象的情况下做到这一点LIST_A 及其在 LIST_B 中的关联索引(即 LIST_A[0] 的索引是 LIST_B[0] 等),然后执行 pd.concat(s1, s2,s3...) 获取所需的数据帧。

在上述情况下,我可以构造所需的数据框,如下所示:

s1 = pd.Series(list_a[0], index=list_b[0])
s2 = pd.Series(list_a[1], index=list_b[1])
s3 = pd.Series(list_a[2], index=list_b[2])
df = pd.concat([s1,s2,s3], axis=1)

0 1 2
A_A 0.000000 0.000000 NaN
A_B -11.351902 NaN NaN
A_D NaN 36.580126 NaN
B_A 11.351902 NaN NaN
B_B 0.000000 NaN 0.000000
B_C NaN NaN -41.944082
C_B NaN NaN 41.944082
C_C NaN NaN 0.000000
D_A NaN -36.580126 NaN
D_D NaN 0.000000 NaN

在我的实际应用程序中,上述列表的大小有数百个,因此我不想创建数百个系列对象,然后将它们全部连接起来(除非这是唯一的方法?)。

我已经阅读了有关 SO 的各种帖子,例如:Adding list with different length as a new column to a dataframeconvert pandas series AND dataframe objects to a numpy array但一直无法找到一个优雅的解决方案来解决需要创建数百个系列对象才能生成所需数据帧的问题。

最佳答案

与您的方法不太不同,但这应该更快:

df = pd.DataFrame(dict(zip(list_b[i], list_a[i])) for i in range(len(list_a))).T         

输出:

             0          1          2
A_A 0.000000 0.000000 NaN
A_B -11.351902 NaN NaN
A_D NaN 36.580126 NaN
B_A 11.351902 NaN NaN
B_B 0.000000 NaN 0.000000
B_C NaN NaN -41.944082
C_B NaN NaN 41.944082
C_C NaN NaN 0.000000
D_A NaN -36.580126 NaN
D_D NaN 0.000000 NaN

关于python - 从具有不同非整数索引的大小不等的列表对象创建数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58566054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com