熊猫交叉加法

时间:2018-11-19 10:16:49

标签: 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,axis=1,ignore_index=True).eq(1)
df2.columns=cols
df2=df2.reset_index(drop=True)
print (df1|df2).astype(int)

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

2 个答案:

答案 0 :(得分:3)

您可以将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

答案 1 :(得分:1)

Numpy解决方案:

首先用1d将第一行提取到iloc数组中,然后按a[:, None]broadcast提取为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