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

从python中的2个数据帧列创建二进制矩阵

  •  1
  • C_psy  · 技术社区  · 7 年前

    我需要创建一个二进制矩阵

    熊猫数据框中的示例数据

    ID P
    2  1
    1  2
    3  2
    1  3
    1  4
    2  5
    3  5
    

    使用

    A = pd.DataFrame(index=df.ID.values, columns=df.P.values, 
                           data=(df.P.values == df.P.values[:,None]).astype(int))
    

    我的电流输出

    Current Output

    就“1”的命中位置而言,这是正确的,但我只想合并列/行编号和行编号,如下所示:

    index 1 2 3 4 5 6 7
    1     0 1 1 1 0 1 0
    2     1 0 0 0 1 0 1
    3     0 1 0 1 1 1 0
    

    如果还不清楚,请随时提问!

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

    使用 get_dumies 具有 max :

    df = pd.get_dummies(df.set_index('ID')['P'].astype(str)).max(level=0).sort_index()
    print (df)
        1  2  3  4  5
    ID               
    1   0  1  1  1  0
    2   1  0  0  0  1
    3   0  1  0  0  1
    
        2
  •  0
  •   Narendra Prasath    7 年前

    你可以试试 pivot_table function

    df["value"]=1
    pd.pivot_table(df, values="value", index=["ID"], columns="P", fill_value=0)