2016-05-12 2 views
0

У меня есть кадр данных, который выглядит следующим образом:DataFrame к Datapanel в панд/Python

Name Permits_13 Score_13 Permits_14 Score_14 Permits_15 Score_15 
0 P.S. 015 ROBERTO CLEMENTE 12.0 284 22 279 32 283 
1 P.S. 019 ASHER LEVY 18.0 296 51 301 55 308 
2 P.S. 020 ANNA SILVER 9.0 294 9 290 10 293 
3 P.S. 034 FRANKLIN D. ROOSEVELT 3.0 294 4 292 1 296 
4 P.S. 064 ROBERT SIMON 3.0 287 15 288 17 291 
5 P.S. 110 FLORENCE NIGHTINGALE 0.0 313 3 306 4 308 
6 P.S. 134 HENRIETTA SZOLD 4.0 290 12 292 17 288 
7 P.S. 137 JOHN L. BERNSTEIN 4.0 276 12 273 17 274 
8 P.S. 140 NATHAN STRAUS 13.0 282 37 284 59 284 
9 P.S. 142 AMALIA CASTRO 7.0 290 15 285 25 284 
10 P.S. 184M SHUANG WEN 5.0 327 12 327 9 327 

И я хотел бы, чтобы превратить его в структуру панели данных в качестве ответа на этот вопрос Fixed effect in Pandas or Statsmodels, так что я могу используйте PanelOLS с фиксированными эффектами.

Моя первая попытка была сделать это преобразование:

df1 = df.ix[:,['Permits_13', 'Score_13']].T 
df2 = df.ix[:,['Permits_14', 'Score_14']].T 
df3 = df.ix[:,['Permits_15', 'Score_15']].T 
pf = pandas.Panel({'df1':df1,'df2':df2,'df3':df3}) 

Однако, как представляется, не будет правильный путь после того, как у меня нет никакой информации о времени. Здесь столбцы, заканчивающиеся на 13, 14 и 15, представляют собой наблюдения за 2013, 2014 и 2015 годы в этом порядке.

Должен ли я создать кадр данных для каждой из строк в исходных данных?

Это мое первое испытание с использованием Pandas, и любая помощь будет оценена по достоинству.

ответ

0

строка документация из DataFrame.to_panel() говорит:

Transform длинный (суммированный) формат (DataFrame) в широкий (3D, панель) формат .

В настоящее время индекс DataFrame должен быть двухуровневым MultiIndex. Это может быть обобщена позднее

Так это означает, что вам нужно сделать:

  1. Стек ваш dataframe (как это в настоящее время «широкий», а не «длинный»)
  2. Выберите две колонки, которые могут уникальный определить индекс вашего dataframe
  3. Установите эти колонки в качестве индекса
  4. Вызов to_panel()

То есть:

df.stack().set_index(['first_col', 'other_col']).to_panel() 
Смежные вопросы