Dataframe со всеми возможными суммами двух массивов в Python - PullRequest
4 голосов
/ 20 марта 2019

Допустим, у меня есть два массива

array_1 = [10,20,30]
array_2 = [50,60,70]

Dataframe мне нужно в качестве вывода:

        10   20   30
50      60   70   80
60      70   80   90
70      80   90  100

Ответы [ 4 ]

5 голосов
/ 20 марта 2019

Используйте outer сложение

>>> np.add.outer(array_1, array_2)

Для создания фрейма данных:

pd.DataFrame(arr, columns=array_2, index=array_1)
2 голосов
/ 20 марта 2019

Использование numpy.ndarray и трансляция:

>>> length = len(array_1)
>>> pd.DataFrame(np.reshape(np.array(array_1), (length, 1)) + np.reshape(np.array(array_2), (1, length)))
    0   1    2
0  60  70   80
1  70  80   90
2  80  90  100
1 голос
/ 20 марта 2019

Вот два коротких метода, использующих ix_

A = sum(np.ix_([40, 0], [10, 20, 30]))
pd.DataFrame(sum(np.ix_(*A)), *A)
#     10  20   30
# 50  60  70   80
# 60  70  80   90
# 70  80  90  100

или c_

A2, A1 = np.c_[[40, 0]] + [10, 20, 30]
pd.DataFrame(np.c_[A2] + A1, A2, A1)
#     10  20   30
# 50  60  70   80
# 60  70  80   90
# 70  80  90  100
1 голос
/ 20 марта 2019

Аналогично ответу @ Маркуса, но с использованием новой оси. Измените массив от_1 до (3,1) и от_2 до (1,3). Полученная сумма двух массивов будет иметь форму (3,3).

df = pd.DataFrame(array_1[np.newaxis, :] + array_2[:, np.newaxis], index = array_1, columns = array_2)

    50  60  70
10  60  70  80
20  70  80  90
30  80  90  100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...