Python 大熊猫的交叉添加

Python 大熊猫的交叉添加,python,pandas,Python,Pandas,如何在我的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,

如何在我的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)

我认为有更简单的方法来处理这种情况。

您可以使用
numpy
|
操作进行广播:

data = df.values
df = pd.DataFrame((data.T | data), columns=df.columns)
或用作:



您可以使用
numpy
|
操作进行以下广播:

data = df.values
df = pd.DataFrame((data.T | data), columns=df.columns)
或用作:


Numpy解决方案:

首先使用
iloc
将第一行提取到
1d
数组,然后通过
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
Numpy解决方案:

首先使用
iloc
将第一行提取到
1d
数组,然后通过
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