将复杂列表转换为第一个值作为第二列标题的dataframe表

2024-09-30 22:28:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将下面的列表转换为如下所示的表格

列表:

val_list = [['ALPHA01', [[1573582200000, 96.96746826171875], [1573582260000, 97.45691935221355], [1573582320000, 97.4244893391927], [1573582380000, 97.32177734375], [1573582440000, None], [1573582500000, None]]], ['BETA01', [[1573582200000, 89.6187235514323], [1573582260000, 90.69141642252605], [1573582320000, 90.83389282226562], [1573582380000, 90.83180745442708], [1573582440000, 90.72371419270833], [1573582500000, None]]], ['ALPHA02', [[1573582200000, 96.67467244466145], [1573582260000, 97.1467997233073], [1573582320000, 97.23036702473958], [1573582380000, 97.26894124348958], [1573582440000, None], [1573582500000, None]]], ['BETA02', [[1573582200000, 90.92616780598958], [1573582260000, 91.39727783203125], [1573582320000, 91.28725179036458], [1573582380000, 91.39530436197917], [1573582440000, 91.26514689127605], [1573582500000, None]]]]

所需的表格格式

TimeStamp   ALPHA01 BETA01  ALPHA02 BETA02
1573582200000   96.96746826 89.61872355 96.67467244 90.92616781
1573582260000   97.45691935 90.69141642 97.14679972 91.39727783
1573582320000   97.42448934 90.83389282 97.23036702 91.28725179
1573582380000   97.32177734 90.83180745 97.26894124 91.39530436
1573582440000   None    90.72371419 None    91.26514689
1573582500000   None    None    None    None

我在获取上表格式方面没有太大成功

我就是这么做的

df = pd.DataFrame(val_list, columns =['value1','Value2']) 
print(df)

输出:

value1                                             Value2
0  PRODLMS1  [[1573582200000, 96.96746826171875], [15735822...
1  PRODCAS1  [[1573582200000, 89.6187235514323], [157358226...
2  PRODLMS2  [[1573582200000, 96.67467244466145], [15735822...
3  PRODCAS2  [[1573582200000, 90.92616780598958], [15735822...

Tags: nonedf列表格式valtimestamplist表格
2条回答

我想你可以做一个简单的循环:

pd.concat([pd.DataFrame(x[1])
             .set_index(0)
             .rename(columns={1:x[0]}) 
           for x in val_list],
          axis=1
         )

输出:

                 ALPHA01     BETA01    ALPHA02     BETA02
0                                                        
1573582200000  96.967468  89.618724  96.674672  90.926168
1573582260000  97.456919  90.691416  97.146800  91.397278
1573582320000  97.424489  90.833893  97.230367  91.287252
1573582380000  97.321777  90.831807  97.268941  91.395304
1573582440000        NaN  90.723714        NaN  91.265147
1573582500000        NaN        NaN        NaN        NaN

另一种解决方案:

val_list = [['ALPHA01', [[1573582200000, 96.96746826171875], [1573582260000, 97.45691935221355], [1573582320000, 97.4244893391927], [1573582380000, 97.32177734375], [1573582440000, None], [1573582500000, None]]], ['BETA01', [[1573582200000, 89.6187235514323], [1573582260000, 90.69141642252605], [1573582320000, 90.83389282226562], [1573582380000, 90.83180745442708], [1573582440000, 90.72371419270833], [1573582500000, None]]], ['ALPHA02', [[1573582200000, 96.67467244466145], [1573582260000, 97.1467997233073], [1573582320000, 97.23036702473958], [1573582380000, 97.26894124348958], [1573582440000, None], [1573582500000, None]]], ['BETA02', [[1573582200000, 90.92616780598958], [1573582260000, 91.39727783203125], [1573582320000, 91.28725179036458], [1573582380000, 91.39530436197917], [1573582440000, 91.26514689127605], [1573582500000, None]]]]
index = [x[0] for x in val_list[0][1]]
val_dict = dict(val_list)
df = pd.DataFrame(val_dict, index=index)
for col in df.columns:
    df[col] = [elem[1] for elem in df[col]]
df
                 ALPHA01      BETA01     ALPHA02     BETA02
1573582200000   96.967468   89.618724   96.674672   90.926168
1573582260000   97.456919   90.691416   97.146800   91.397278
1573582320000   97.424489   90.833893   97.230367   91.287252
1573582380000   97.321777   90.831807   97.268941   91.395304
1573582440000   NaN         90.723714        NaN    91.265147
1573582500000   NaN             NaN        NaN         NaN

相关问题 更多 >