Я добавил больше данных в ваш пример, чтобы показать, что скрипт будет гибким, если будут добавлены новые функции или строки (ключи).
- Собрать все функции в списке (имя)
- Получить только список номеров
- Назначение новых имен столбцов
- Создать функцию, которая будет возвращать каждый элемент в списке номеров
- Используйте функцию apply для создания новых столбцов
- Удалить / удалить временные столбцы
Вот оно,
mydict = {'key1':[['ft1',[2,4,12,2]],['ft2',[0,3,3,1]],['ft3',[0,3,3,1]]],
'key2':[['ft1',[5,0,2,9]],['ft2',[10,39,3,2]],['ft3',[0,3,3,1]]]
,'key3':[['ft1',[5,0,2,9]],['ft2',[10,39,3,2]],['ft3',[0,3,3,1]]]}
df = pd.DataFrame(mydict).T
colname = [df[c][0][0] for c in df]
df = df.applymap(lambda c: c[1])
df.reset_index(level=0, inplace=True)
df.columns=['ID'] + colname
s=['_sig','_med','_les','_non']
def f(x):
return pd.Series([x[0], x[1], x[2], x[3]])
for col in colname:
df[[col+'_sig', col+'_med', col+'_les', col+'_non']]= df[col].apply(lambda x: f(x))
df.drop(colname, axis=1, inplace=True)
df
Результат:
ID ft1_sig ft1_med ft1_les ft1_non ft2_sig ft2_med ft2_les ft2_non ft3_sig ft3_med ft3_les ft3_non
0 key1 2 4 12 2 0 3 3 1 0 3 3 1
1 key2 5 0 2 9 10 39 3 2 0 3 3 1
2 key3 5 0 2 9 10 39 3 2 0 3 3 1