Новичок в 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)