У меня есть 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
Это кажется очень запутанным. Есть ли более простой способ?