Перекрестное сложение в пандах - PullRequest
0 голосов
/ 19 ноября 2018

Как применить кросс-сложение (ИЛИ) в моем кадре данных панд, как показано ниже.

Ввод:

   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 голосов
/ 19 ноября 2018

Решение Numpy:

Сначала извлеките первую строку в массив 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
0 голосов
/ 19 ноября 2018

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...