Создание нового столбца строки в DataFrame со столбцами MultiIndex с использованием формата, основанного на новой серии и существующем столбце - PullRequest
0 голосов
/ 04 июля 2019

У меня есть DataFrame со столбцами MultiIndex:

import pandas as pd
df = pd.DataFrame({('par1','a'):[1,5],('par1','b'):[2,6],
                       ('par1','c'):[3,7],('par1','d'):[4,8]})
df

par1
    a   b   c   d
0   1   2   3   4
1   5   6   7   8

Теперь я хочу вставить новую запись уровня 1. Если это связано с выражением с существующими столбцами, я могу сделать это следующим образом:

df[('par1','a+c')] = df[('par1','a')] + df[('par1','c')]
df

    par1
    a   b   c   d   a+c
0   1   2   3   4   4
1   5   6   7   8   12

Теперь у меня есть серия s1 с вычисленными значениями (с тем же индексом строки, что и df):

s1 = pd.Series([3,7])

Я хочу создать новый строковый столбец string, в котором каждая строка построена из поэлементной комбинации ряда и, скажем, столбца ('par1','a+c') в операторе format .

Единственный способ, который я нашел, - это сначала вставить Series s1 как новый столбец в таблицу:

df[('par1','s1')] = s1

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

df[('par1','string')] = df.apply(lambda row: '{} out of {}'.format(row[0],row[4]),axis=1)

И, наконец, опустить столбец s1:

df.drop(columns='s1',level=1,inplace=True)
df

    par1
    a   b   c   d   a+c   string
0   1   2   3   4   4   1 out of 4
1   5   6   7   8   12  5 out of 12

Это кажется очень запутанным. Есть ли более простой способ?

...