如何在我的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 | 以广播方式操作:
numpy
|
data = df.values df = pd.DataFrame((data.T | data), columns=df.columns)
或使用 np.logical_or 作为:
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
第一次将第一行提取到 1d 排列 iloc 然后 broadcast a[:, None] 将形状更改为 Mx1 :
1d
iloc
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