Как мне разместить 3-D массивы в сгруппированном pandas кадре данных? - PullRequest
1 голос
/ 17 января 2020

У меня есть pandas кадр данных, который состоит из двух столбцов: столбца строковых идентификаторов и столбца трехмерных массивов. Массивы сгруппированы по идентификатору. Как я могу сложить все массивы для каждой группы, чтобы для каждого идентификатора был один сложенный массив? У меня есть следующий код:

df1 = pd.DataFrame({'IDs': ids})
df2 = pd.DataFrame({'arrays':arrays})

df = pd.concat([df1, df2], axis=1)
grouped = df['arrays'].groupby(df['IDs'])

(я попытался np.dstack(grouped), но это не удалось.)

1 Ответ

0 голосов
/ 17 января 2020

Я считаю, что это то, что вы хотите:

df.groupby('IDs')['arrays'].apply(np.dstack).to_frame().reset_index()

Это будет применять np.dstack(...) функцию для каждой группы массивов, имеющих общий идентификатор.

Функция apply() возвращает pd.Series (с идентификаторами в качестве индекса), поэтому мы затем используем to_frame() для создания из него DataFrame и reset_index() для возврата идентификаторов в виде столбца.

(Примечание: документация для apply() говорит об использовании agg() для эффективности, но, к сожалению, кажется невозможным использовать agg() с функцией, которая возвращает ndarray, такой как np.dstack. В этом случае , agg() хочет рассматривать этот массив как несколько объектов, как ряд, а не как один объект ... Мои попытки с ним привели к исключению, говорящему "функция не уменьшает".)

...