Добавьте элементы в numpy массивах, где каждый элемент имеет связанный «тип» - PullRequest
1 голос
/ 13 апреля 2020

Мне интересно, возможно ли добавить numpy массивы вместе по пунктам, где с каждым элементом связан «тип».

Например, скажем, у меня есть следующие 2 массива:

array1 = [[2 'x'] [3 'y'] [4 'z']]  
array2 = [[10 'x'] [6 'z']]

И я хотел бы создать этот массив:

array3 = [[12 'x'] [3 'y'] [10 'z']]

Есть ли простой способ сделать это, используя numpy? Спасибо!

1 Ответ

1 голос
/ 13 апреля 2020

Вы можете использовать numpy напрямую или воспользоваться встроенным групповым методом pandas.

Numpy Реализация

import numpy as np

a1 = np.array([[2, 'x'], [3, 'y'], [4 ,'z']])
a2 = np.array([[10, 'x'] ,[6 ,'z']])

# Stack the two arrays together
a = np.vstack([a1,a2])

# Define "groups"
grp = np.unique(a[:,1])

# Groupby each group in grp and sum the other column
np.array([[a[a[:,1]==g][:,0].astype(float).sum(), g]  for g in grp])
array([['12.0', 'x'],
       ['3.0', 'y'],
       ['10.0', 'z']], dtype='<U32')

Pandas Реализация

import pandas as pd

# Convert a into a pandas DataFrame
df = pd.DataFrame(a, columns=list('ab'))
# Cast first column type
df['a'] = df['a'].astype(int)

# Use groupby sum
df.groupby('b').sum().reset_index()[['a','b']].to_numpy()
array([[12, 'x'],
       [3, 'y'],
       [10, 'z']], dtype=object)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...