如何在我的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)
我认为有更简单的方法来处理这种情况。
答案 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