#python-3.x #pandas #dataframe
#python-3.x #pandas #фрейм данных
Вопрос:
Мне нужно разделить DataFrame
столбцы на два и добавить дополнительное значение в новый столбец. Суть в том, что мне нужно поднять исходные имена столбцов на один уровень выше и добавить два новых имени столбцов.
Учитывая DataFrame
h
:
>>> import pandas as pd
>>> h = pd.DataFrame({'a': [0.6, 0.4, 0.1], 'b': [0.2, 0.4, 0.7]})
>>> h
a b
0 0.6 0.2
1 0.4 0.4
2 0.1 0.7
Мне нужно поднять исходные имена столбцов на один уровень и добавить два новых имени столбцов. Результат должен выглядеть следующим образом:
>>> # some stuff...
a b
expected received expected received
0 0.6 1 0.2 1
1 0.4 1 0.4 1
2 0.1 1 0.7 1
Я пробовал это:
>>> h['a1'] = [1, 1, 1]
>>> h['b1'] = [1, 1, 1]
>>> t = [('f', 'expected'),('f', 'received'), ('g', 'expected'), ('g', 'received')]
>>> h.columns = pd.MultiIndex.from_tuples(t)
>>> h
f g
expected received expected received
0 0.6 0.2 1 1
1 0.4 0.4 1 1
2 0.1 0.7 1 1
Это просто переименовывает столбцы, но не выравнивает их должным образом. Я думаю, что проблема в том, что нет связи между a1
и b1
столбцами expected
и received
.
Как мне поднять исходные имена столбцов на один уровень и добавить два новых имени столбцов?
Ответ №1:
Я использую concat
with keys
, затем swaplevel
h1=h.copy()
h1[:]=1
pd.concat([h,h1],keys=['expected', 'received'],axis=1).
swaplevel(0,1,axis=1).
sort_index(level=0,axis=1)
Out[233]:
a b
expected received expected received
0 0.6 1.0 0.2 1.0
1 0.4 1.0 0.4 1.0
2 0.1 1.0 0.7 1.0