2016-08-31 4 views
0

Есть ли опрятный способ сделать это, или мне лучше было бы взглянуть на создание нового фрейма данных, глядя на панель при построении каждого столбца?pandas - конвертировать панель в DataFrame с помощью таблицы поиска для заголовков столбцов

У меня есть трехмерный массив данных, который я поместил в панель, и я хочу реорганизовать его на основе 2d-таблицы поиска, используя 2 оси, так что это будет DataFrame с метками, взятыми из моей таблицы поиска используя ближайшее значение. В разновидности двойного vlookup типа пути.

Главное, что я пытаюсь достичь, - это быстро найти временные ряды данных на основе метки. Если есть лучший способ, пожалуйста, дайте мне знать!

мои данные находятся в панели, которая выглядит так: с широтой осях и малой осью долготы.

data 
Out[920]: 
<class 'pandas.core.panel.Panel'> 
Dimensions: 53 (items) x 29224 (major_axis) x 119 (minor_axis) 
Items axis: 42.0 to 68.0 
Major_axis axis: 2000-01-01 00:00:00 to 2009-12-31 21:00:00 
Minor_axis axis: -28.0 to 31.0 

и мой просмотр таблицы, как это:

label_coords 
Out[921]: 
      lat  lon 
label      
2449 63.250122 -5.250000 
2368 62.750122 -5.750000 
2369 62.750122 -5.250000 
2370 62.750122 -4.750000 

Я вроде в убыток. Совершенно новый для python в целом и только на самом деле начал использовать панды вчера.

Большое спасибо заранее! Извините, если это дубликат, я не мог найти ничего, что было бы о том же типе вопроса.

Энди

ответ

0

выяснял решение петли на основе и думал, что я так же могу в случае, если кто-то имеет этот тип проблемы

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

label_coord = label_coord.pivot('lat','lon','label') 

это тогда производит dataframe где метки и значения широты/долготы имеют индекс/столбцы

затем используется этот контур, где данные являются панелью, как в вопросе:

data_labelled = pd.DataFrame() 
for i in label_coord.columns: #longitude 
    for j in label_coord.index: #latitude 
     lbl = label_coord[i][j] 
     shut_nump['%s'%lbl]=data[j][i]