Панды: назначить мультииндексный столбец из DataFrame - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть DataFrame со столбцами multiIndex. Предположим, это так:

index = pd.MultiIndex.from_tuples([('one', 'a'), ('one', 'b'),
                                   ('two', 'a'), ('two', 'b')])
df = pd.DataFrame({'col': np.arange(1.0, 5.0)}, index=index)

df = df.unstack(1)

(я знаю, что это определение может быть более прямым). Теперь я хочу установить новый столбец уровня 0 на основе DataFrame. Например

df['col2'] = df['col'].applymap(lambda x: int(x < 3))

Это не работает. Единственный метод, который я нашел, - это отдельно добавить каждый столбец: Панды: добавить столбец к мультииндексному столбцу данных или какой-то запутанный процесс объединения.

Желаемый результат - новый столбец уровня 0 'col2' с двумя вложенными столбцами уровня 1: 'a' и 'b'

Любая помощь будет высоко ценится, спасибо.

1 Ответ

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

Я считаю, что нужно решение без unstack и stack - фильтрация по boolean indexing, rename значениям для избежания дублирования и последнего использования DataFrame.append:

df2 = df[df['col'] < 3].rename({'one':'one1', 'two':'two1'}, level=0)
print (df2)
        col
one1 a  1.0
     b  2.0

df = df.append(df2)
print (df)
        col
one  a  1.0
     b  2.0
two  a  3.0
     b  4.0
one1 a  1.0
     b  2.0
...