2017-02-20 4 views
1

Я хочу создать индекс как часть многоуровневого индекса из данных, встроенных в имя столбца. Этот вопрос гораздо проще показать, чем описать. Это то, что выглядит мои исходные данные, как:Как создать многоуровневый индекс из имен столбцов?

d = {'time':[0,1,2], 'part_0_hits': [100,200,300], 'part_1_hits': [25,50,75]} 
df = pd.DataFrame(d) 

Я хочу создать новый индекс под названием «часть», которая имеет номера деталей, в именах столбцов. Результат должен выглядеть следующим образом:

d2 = {'time':[0,1,2,0,1,2], 'part':[0,0,0,1,1,1], 'hits':[100,200,300,25,50,75]} 
df2 = pd.DataFrame(d2) 

Я бы поставил таблицу здесь, но я не уверен, как это сделать разметку. Вот снимок моей IPython ноутбука с dataframes отображается:

enter image description here

Там должен быть элегантным способом сделать это, но я не могу найти его. Если я могу заставить его выглядеть так, как показано выше, я могу использовать set_index для создания многоуровневого индекса ...

Спасибо !!!

ответ

2

Вы можете использовать pd.melt для этого

df = pd.melt(df, id_vars=["time"],var_name="part", value_name="hits") 
df['part'] = df['part'].str.extract('(\d+)').astype(int) 

Вы

time part hits 
0 0  0  100 
1 1  0  200 
2 2  0  300 
3 0  1  25 
4 1  1  50 
5 2  1  75 
+0

Замечательно! Это близко. Однако я должен был включить более сложную отправную точку. Мои реальные данные имеют много столбцов на каждую часть. Поэтому, если у меня есть part_0_hits, а также part_0_size вместе с part_1_hits и part_1_size для столбцов, могу ли я использовать pd.melt аналогичным образом? Еще раз спасибо! –

+0

@Найти на улице, Он будет работать на любом количестве столбцов. После того, как вы выбрали переменную id (время в этом случае), расплав оставит остальную часть столбцов и возвратит переменную и значение – Vaishali

Смежные вопросы