代码之家  ›  专栏  ›  技术社区  ›  00__00__00

dataframe到基于两列的dataframe列表

  •  1
  • 00__00__00  · 技术社区  · 7 年前

    我有一个数据框,如下所示:

    df=
             columnDate    column_key      v1   v2 ... vN
    0         01/01/2000       'a'         1    3
    1         01/01/2000       'b'         2    4
    2         02/01/2000       'a'         3    5
    3         02/01/2000       'b'         4    6
    ...
    

    我想将此数据帧拆分为一个数据帧字典,每个原始数据帧对应一个 v1..vN 列和中的可能值 columnDate 作为的新列和值 columns_key 作为索引。

    对于本例,所需输出为:

    output['v1']=
          01/01/2000    02/01/2000    
    'a'    1               3      
    'b'    2               4       
    
    output['v2']=
          01/01/2000    02/01/2000    
    'a'    3               5      
    'b'    4               6   
    

    N、 B:中缺少的值 df 应填写np。南安

    1 回复  |  直到 7 年前
        1
  •  1
  •   jezrael    7 年前

    使用 set_index 具有 unstack :

    df1 = df.set_index(['column_key','columnDate']).unstack()
    print (df1)
                       v1                    v2           
    columnDate 01/01/2000 02/01/2000 01/01/2000 02/01/2000
    column_key                                            
    'a'                 1          3          3          5
    'b'                 2          4          4          6
    

    然后在 dict comprehension 按第一级选择 MultiIndex 通过 xs :

    output = {x:df1.xs(x, axis=1) for x in df1.columns.levels[0]}
    print (output)
    {'v1': columnDate  01/01/2000  02/01/2000
    column_key                        
    'a'                  1           3
    'b'                  2           4, 'v2': columnDate  01/01/2000  02/01/2000
    column_key                        
    'a'                  3           5
    'b'                  4           6}
    

    print (output['v1'])
    columnDate  01/01/2000  02/01/2000
    column_key                        
    'a'                  1           3
    'b'                  2           4
    
    print (output['v2'])
    columnDate  01/01/2000  02/01/2000
    column_key                        
    'a'                  3           5
    'b'                  4           6