Як об'єднати 2 numpy ndarray на ndarray, використовуючи значення стовпця?

У мене 2 ndarray:

a = np.array([[1,2], [5,0], [6,4]])
b = np.array([[1,10],[6,30], [5,20]])

Я бажаю об'єднати їх у масив:

[[ 1  2 10]
 [ 5  0 20]
 [ 6  4 30]]

Хтось знає не ітераційний режим для об'єднання 2 масиву значеннями стовпця 0?

Я знайшов лише так:

import numpy as np

a = np.array([[1,2], [5,0], [6,4]])
b = np.array([[1,10],[6,30], [5,20]])
new0col = np.zeros((a.shape[0],1), dtype=int)
a = np.append(a, new0col, axis=1)
l1 = a[:,0].tolist()
l2 = b[:,0].tolist()
for i in l2:
    a[l1.index(i),2] = b[l2.index(i),1]
print(a)
1
Яка картина для об'єднання? З вашого повідомлення не зрозуміло.
додано Автор AmphotericLewisAcid, джерело
Яка картина для об'єднання? З вашого повідомлення не зрозуміло.
додано Автор AmphotericLewisAcid, джерело
Яка картина для об'єднання? З вашого повідомлення не зрозуміло.
додано Автор AmphotericLewisAcid, джерело

6 Відповіді

Я знайшов альтернативне рішення з pandas , менш ефективним, ніж numpy , але я бажаю розмістити його також, тому що я думаю, що це корисно. Хороше рішення, яке дає мені jpp (я не знав цього методу), має ліміт, a і b повинні мати однакові ключі.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pandas as pd
import numpy as np

def merge_w_np(a, b):
    zeros = np.zeros((a.shape[0], np.shape(b)[1] -1), dtype=int)
    a = np.append(a, zeros, axis=1)
    l1 = a[:,0].tolist()
    for j, i in enumerate(b[:,0].tolist()):
        a[l1.index(i),2] = b[j,1]
    print(a)

def merge_w_pd(a, b):
    dfa = pd.DataFrame(data=a,                      # values
                       index=a[:,0])                # 1st column as index
    dfb = pd.DataFrame(data=b,                      # values
                       index=b[:,0])                # 1st column as index
    dfa.columns = ['id', 'value']
    dfb.columns = ['id', 'value']
    # print('a',dfa)
    # print('b',dfb)
    dfc = dfa.merge(dfb, left_on='id', right_on='id', how='outer')
    print(dfc)

a = np.array([[1,2], [2,8], [5,0], [6,4], [7,9]])
b = np.array([[1,10],[6,30], [5,20]])
merge_w_np(a, b)
merge_w_pd(a, b)
0
додано

Я знайшов альтернативне рішення з pandas , менш ефективним, ніж numpy , але я бажаю розмістити його також, тому що я думаю, що це корисно. Хороше рішення, яке дає мені jpp (я не знав цього методу), має ліміт, a і b повинні мати однакові ключі.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pandas as pd
import numpy as np

def merge_w_np(a, b):
    zeros = np.zeros((a.shape[0], np.shape(b)[1] -1), dtype=int)
    a = np.append(a, zeros, axis=1)
    l1 = a[:,0].tolist()
    for j, i in enumerate(b[:,0].tolist()):
        a[l1.index(i),2] = b[j,1]
    print(a)

def merge_w_pd(a, b):
    dfa = pd.DataFrame(data=a,                      # values
                       index=a[:,0])                # 1st column as index
    dfb = pd.DataFrame(data=b,                      # values
                       index=b[:,0])                # 1st column as index
    dfa.columns = ['id', 'value']
    dfb.columns = ['id', 'value']
    # print('a',dfa)
    # print('b',dfb)
    dfc = dfa.merge(dfb, left_on='id', right_on='id', how='outer')
    print(dfc)

a = np.array([[1,2], [2,8], [5,0], [6,4], [7,9]])
b = np.array([[1,10],[6,30], [5,20]])
merge_w_np(a, b)
merge_w_pd(a, b)
0
додано

Я знайшов альтернативне рішення з pandas , менш ефективним, ніж numpy , але я бажаю розмістити його також, тому що я думаю, що це корисно. Хороше рішення, яке дає мені jpp (я не знав цього методу), має ліміт, a і b повинні мати однакові ключі.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pandas as pd
import numpy as np

def merge_w_np(a, b):
    zeros = np.zeros((a.shape[0], np.shape(b)[1] -1), dtype=int)
    a = np.append(a, zeros, axis=1)
    l1 = a[:,0].tolist()
    for j, i in enumerate(b[:,0].tolist()):
        a[l1.index(i),2] = b[j,1]
    print(a)

def merge_w_pd(a, b):
    dfa = pd.DataFrame(data=a,                      # values
                       index=a[:,0])                # 1st column as index
    dfb = pd.DataFrame(data=b,                      # values
                       index=b[:,0])                # 1st column as index
    dfa.columns = ['id', 'value']
    dfb.columns = ['id', 'value']
    # print('a',dfa)
    # print('b',dfb)
    dfc = dfa.merge(dfb, left_on='id', right_on='id', how='outer')
    print(dfc)

a = np.array([[1,2], [2,8], [5,0], [6,4], [7,9]])
b = np.array([[1,10],[6,30], [5,20]])
merge_w_np(a, b)
merge_w_pd(a, b)
0
додано
ІТ КПІ - Python
ІТ КПІ - Python
625 учасників

Канал обговорень про всякі штуки зі світу пайтону. Прохання: 0. мати повагу одне до одного; 1. не матюкатися в сторону людей; 2. не захламляти тред повідомленнями по одному слову;