代码之家  ›  专栏  ›  技术社区  ›  KOB

从2-D列表创建数据框,其中第二个轴的3个元素是行索引、COL名称和单元格值。

  •  0
  • KOB  · 技术社区  · 6 年前

    我有一个二维列表,格式如下:

    [
        [1, 10, 3],
        [1, 11, 2],
        [1, 12, 5],
        [2, 11, 3],
        [2, 12, 1],
        [2, 13, 4]
    ]
    

    现在我想制作一个大熊猫DF,其中每个内部列表的第一个数是行索引,第二个数字是列名称,第三个数字是给定单元格的值(如果该行不存在该行,则设置为0)。

         10    11    12    13
    1     3     2     5     0 
    2     0     3     1     4
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   Bharath M Shetty    6 年前

    将其转换为dataframe并使用pivot表,即

    df = pd.DataFrame(li).pivot_table(index=0,columns=1,values=2,fill_value=0)
    
    1   10   11   12   13
    0                    
    1  3.0  2.0  5.0  0.0
    2  0.0  3.0  1.0  4.0
    
        2
  •  0
  •   jezrael    6 年前

    使用 set_index unstack 对于整形:

    df = pd.DataFrame(a).set_index([0,1])[2].unstack(fill_value=0)
    print (df)
    1  10  11  12  13
    0                
    1   3   2   5   0
    2   0   3   1   4
    

    如果上面的解决方案失败,因为具有列对的非唯一索引必须由聚合 groupby 一些聚合函数 mean , sum 以下内容:

    a = [
        [1, 10, 3], <- 1,10
        [1, 10, 2], <- 1,10
        [1, 12, 5],
        [2, 11, 3],
        [2, 12, 1],
        [2, 13, 4]
    ]
    
    df = pd.DataFrame(a).groupby([0,1])[2].mean().unstack(fill_value=0)
    print (df)
    1   10   11   12   13
    0                    
    1  2.5  0.0  5.0  0.0 <- (2+3)/2 = 2.5
    2  0.0  3.0  1.0  4.0