Как добавить вложенный столбец в 3D-фрейм Pandas 3D? - PullRequest
0 голосов
/ 08 сентября 2018

Новичок в Pandas, не очень уверен, как работает 3D DataFrame. Мой фрейм данных под названием 'new' выглядит так:

     unique    cat    numerical   
          a  b   c  d         e  f
   0      0  1   2  3         4  5
   1      0  1   2  3         4  5

Я хочу вставить столбец 'z', чтобы он заканчивался так:

     unique       cat    numerical   
          a  b  z   c  d         e  f
   0      0  1  9   2  3         4  5
   1      0  1  9   2  3         4  5

Я успешно создал новый столбец после вырезания 'unique' из моего кадра данных:

Делаем это:

new_column = new.loc[:,'unique'].assign(z=pd.Series([9,9]).values)

Получает меня это:

   a  b  z
0  0  1  9
1  0  1  9

Однако я понятия не имею, как поместить его обратно в кадр данных. Я попробовал:

new['unique'] = new_column

Но с тех пор я узнал, что он просто пытается заменить все значения во всех строках и столбцах, найденных в 'unique', следующим образом:

new['unique'] = 'a'

Возвращает:

  unique    cat    numerical   
       a  b   c  d         e  f
0      a  a   2  3         4  5
1      a  a   2  3         4  5

И использование .loc дает вместо этого:

  unique     cat    numerical   
       a   b   c  d         e  f
0    NaN NaN   2  3         4  5
1    NaN NaN   2  3         4  5

Вот мой полный код:

import pandas as pd
import numpy as np

data=[[0,1,2,3,4,5],[0,1,2,3,4,5]]
datatypes=np.array(['unique','unique','cat','cat','numerical','numerical'])
columnnames=np.array(['a','b','c','d','e','f'])
new = pd.DataFrame(data=data, columns=pd.MultiIndex.from_tuples(zip(datatypes,columnnames)))
print('new: ')
print(new)

new_column = new.loc[:,'unique'].assign(z=pd.Series([9,9]).values)
print('\nnew column:')
print(new_column)

new.loc[:,'unique'] = new_column
print('\nattempt 1:')
print(new)

new['unique'] = new_column
print('\nattempt 2:')
print(new)

1 Ответ

0 голосов
/ 08 сентября 2018

Один из способов сделать это:

# Create your new multiindexed column:
new['unique','z'] = 9
# Re-order your columns in your desired order:
new = new[['unique', 'cat', 'numerical']]

>>> new
  unique       cat    numerical   
       a  b  z   c  d         e  f
0      0  1  9   2  3         4  5
1      0  1  9   2  3         4  5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...