代码之家  ›  专栏  ›  技术社区  ›  Mohamed Thasin ah

大熊猫的交叉添加

  •  0
  • Mohamed Thasin ah  · 技术社区  · 6 年前

    如何在我的pandas数据框中应用交叉加法(OR),如下所示。

    输入:

       A  B  C  D
    0  0  1  0  1
    

       A  B  C  D
    0  0  1  0  1
    1  1  1  1  1
    2  0  1  0  1
    3  1  1  1  1
    

    到目前为止,我可以用这个,

    cols=df.columns
    n=len(cols)
    df1=pd.concat([df]*n,ignore_index=True).eq(1)
    df2= pd.concat([df.T]*n,axis=1,ignore_index=True).eq(1)
    df2.columns=cols
    df2=df2.reset_index(drop=True)
    print (df1|df2).astype(int)
    

    2 回复  |  直到 6 年前
        1
  •  3
  •   Space Impact    6 年前

    你可以用 numpy | 以广播方式操作:

    data = df.values
    df = pd.DataFrame((data.T | data), columns=df.columns)
    

    或使用 np.logical_or 作为:

    df = pd.DataFrame(np.logical_or(data,data.T).astype(int), columns=df.columns)
    

    print(df)
    
       A  B  C  D
    0  0  1  0  1
    1  1  1  1  1
    2  0  1  0  1
    3  1  1  1  1
    
        2
  •  1
  •   jezrael    6 年前

    第一次将第一行提取到 1d 排列 iloc 然后 broadcast a[:, None] 将形状更改为 Mx1 :

    a = df.iloc[0].values
    df = pd.DataFrame(a | a[:, None], columns=df.columns)
    print (df)
       A  B  C  D
    0  0  1  0  1
    1  1  1  1  1
    2  0  1  0  1
    3  1  1  1  1