2015-12-22 4 views
0

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

[np.mean(data.minor_xs('N0')[g]) for g in data] 

Но это кажется слишком громоздким. Разве нет более чистого способа извлечения столбцов N0, например данных ['N0']?

+0

Пожалуйста, покажите структуру данных панели. Является ли это списком кадров данных? Сложная, большая слава данных с панельными индикаторами? Я вижу хорошего кандидата для 'groupby()'. – Parfait

ответ

1

Вы можете использовать pd.Panel.apply(see docs), как показано случайными данными выборки:

df1 = pd.DataFrame(np.random.randn(4, 2), columns=['A', 'B']) 
df2 = pd.DataFrame(np.random.randn(4, 2), columns=['A', 'B']) 
data = {'Item1': df1, 'Item2': df2} 

df = pd.Panel(data) 

<class 'pandas.core.panel.Panel'> 
Dimensions: 2 (items) x 4 (major_axis) x 2 (minor_axis) 
Items axis: Item1 to Item2 
Major_axis axis: 0 to 3 
Minor_axis axis: A to B 

, который, как DataFrame, выглядит следующим образом:

   Item1  Item2 
major minor      
0  A  -0.572396 0.515488 
     B  0.796982 0.726253 
1  A  0.345817 -0.330810 
     B  -2.516973 1.833602 
2  A  -2.140583 -1.050717 
     B  1.302233 -1.391122 
3  A  -0.088435 -0.041199 
     B  0.521575 0.618990 

Использование .apply() ниже дает mean для каждого column по DataFrame, образец показывает, как выбрать только B.

df.apply(np.mean, axis='major').loc['B'] 

Item1 0.025954 
Item2 0.446931 
Name: B, dtype: float64 

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

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