Расширить датафрейм содержимым серии массивов - PullRequest
0 голосов
/ 13 января 2019

У меня есть пандас DataFrame bb и серия nandy массивов панд aa с тем же количеством строк.

>>> bb
          A         B
0  0.049315  0.362793
1  0.853909  0.590942
2  0.854748  0.247608
3  0.084967  0.293541
4  0.053430  0.922705
5  0.571357  0.404485
6  0.363018  0.070912
7  0.784807  0.641253

>>> aa

0    [0.4648, 0.8575, 0.5008]
1    [0.3056, 0.2737, 0.0137]
2     [0.8038, 0.0858, 0.345]
3    [0.4135, 0.7571, 0.3686]
4    [0.7482, 0.8063, 0.7976]
5    [0.9359, 0.5873, 0.2319]
6     [0.8838, 0.7109, 0.712]
7    [0.6493, 0.1516, 0.5401]
dtype: object

Мне нужно добавить три столбца в DataFrame bb, содержащие элементы aa. Желаемый результат таков:

          A         B      v0      v1      v2
0  0.049315  0.362793  0.4648  0.8575  0.5008
1  0.853909  0.590942  0.3056  0.2737  0.0137
2  0.854748  0.247608  0.8038  0.0858  0.3450
3  0.084967  0.293541  0.4135  0.7571  0.3686
4  0.053430  0.922705  0.7482  0.8063  0.7976
5  0.571357  0.404485  0.9359  0.5873  0.2319
6  0.363018  0.070912  0.8838  0.7109  0.7120
7  0.784807  0.641253  0.6493  0.1516  0.5401

Я могу реализовать это с помощью следующего кода:

rows, cols = 8, 3

ixs = ["v" + str(i) for i in range(cols)]
bb[ixs] = pd.DataFrame(np.zeros((8, 3)))
for i in range(rows):
    for j in range(cols):
        bb[ixs[j]][i] = aa[i][j]

Однако это очень медленно на больших DataFrames, которые у меня есть. Есть ли более идиоматический способ сделать это в pandas / numpy, который работает быстрее?

1 Ответ

0 голосов
/ 13 января 2019

Создать DataFrame по конструктору, изменить имена столбцов на add_prefix и добавить к оригиналу с помощью join или concat:

df = bb.join(pd.DataFrame(aa.values.tolist()).add_prefix('v'))

Или:

df = pd.concat([bb, pd.DataFrame(aa.values.tolist()).add_prefix('v')], axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...