2015-03-30 2 views
0

У меня есть серия данных в кадре данных.Индексирование pandas dataframes внутри pandas dataframes с python

dataframe верхнего уровня структурирован следующим образом:

24hr 48hr 72hr 
D1 x  x  x 
D2 x  x  x 
D3 x  x  x 

В каждом случае Х представляет собой dataframe созданного с pandas.read_excel()

один из столбцов в каждых х dataframe имеет название «Средний суд Длина» и в этом столбце есть три записи (т.е. строки, индексы).

Что я хочу вернуть, это среднее значение для столбца «Средняя длина судна». Мне также интересно, как вернуть определенную ячейку в этот столбец. Я знаю, что есть метод .mean для pandas dataframes, но я не могу понять синтаксис индексации, чтобы использовать его.

Ниже приведен пример

import pandas as pd 

a = {'Image name' : ['Image 1', 'Image 2', 'Image 3'], 'threshold' : [20, 25, 30], 'Average Vessels Length' : [14.2, 22.6, 15.7] } 
b = pd.DataFrame(a, columns=['Image name', 'threshold', 'Average Vessels Length']) 

c = pd.DataFrame(index=['D1','D2','D3'], columns=['24hr','48hr','72hr']) 
c['24hr']['D1'] = a 
c['48hr']['D1'] = a 
c['72hr']['D1'] = a 
c['24hr']['D2'] = a 
c['48hr']['D2'] = a 
c['72hr']['D2'] = a 
c['24hr']['D3'] = a 
c['48hr']['D3'] = a 
c['72hr']['D3'] = a 

Это возвращает среднее из значений в столбце «Средние суда Длина»:

print b['Average Vessels Length'].mean() 

Это возвращает все значения в 24 часа, D1, «Средняя Суда Длина»

print c['24hr']['D1']['Average Vessels Length'] 

Это не работает:

print c['24hr']['D1']['Average Vessels Length'].mean() 

И я не могу понять, как получить доступ к какой-либо конкретной величине в с [ «24 часа»] [ «D1»] [ «Среднего суда Длины»]

В конце концов я хочу взять среднее из()

Любая помощь была бы принята с благодарностью за любую помощь.

+0

Можете ли вы попытаться собрать некоторые данные примера? В идеале вам нужны несколько строк кода, которые люди могут скопировать-вставить в консоль и иметь фреймворк данных, с которым они могут попробовать. – Marius

+0

@ Мариус не просто дать функциональный пример, поскольку я извлекаю данные из внешнего .xls-файла со многими столбцами. – agf1997

+0

Вам нужно создать минимальный пример, демонстрирующий проблему, чтобы люди имели возможность работать, а не обязательно ваши фактические данные, но, вероятно, что-то сочеталось с некоторыми для циклов и некоторые из них использовали метод numpy.random.randn() ', см. [здесь] (http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples) для некоторых советов. – Marius

ответ

0

Я предполагаю, что, так как вы сказали, каждый элемент вашего большого dataframe был dataframe, ваш пример данные должен быть:

import pandas as pd 

a = {'Image name' : ['Image 1', 'Image 2', 'Image 3'], 'threshold' : [20, 25, 30], 'Average Vessels Length' : [14.2, 22.6, 15.7] } 
b = pd.DataFrame(a, columns=['Image name', 'threshold', 'Average Vessels Length']) 

c = pd.DataFrame(index=['D1','D2','D3'], columns=['24hr','48hr','72hr']) 
c['24hr']['D1'] = b 
c['48hr']['D1'] = b 
c['72hr']['D1'] = b 
c['24hr']['D2'] = b 
c['48hr']['D2'] = b 
c['72hr']['D2'] = b 
c['24hr']['D3'] = b 
c['48hr']['D3'] = b 
c['72hr']['D3'] = b 

Чтобы получить среднее значение каждой отдельной ячейки, которую вы можете использовать applymap, который отображает функцию каждой ячейки DataFrame:

cell_means = c.applymap(lambda e: e['Average Vessels Length'].mean()) 
cell_means 
Out[14]: 
    24hr 48hr 72hr 
D1 17.5 17.5 17.5 
D2 17.5 17.5 17.5 
D3 17.5 17.5 17.5 

и как только у вас есть те, то вы можете получить столбец означает и т.д. и перейти к нормализации в среднем:

col_means = cell_means.mean(axis=0) 
col_means 
Out[11]: 
24hr 17.5 
48hr 17.5 
72hr 17.5 
dtype: float64 
+0

Спасибо! Кажется, это работает, но сейчас у меня проблемы с получением следующего шага. Я хочу нормализовать данные в первую строку, чтобы я мог построить график линии для каждого Dx. Другими словами, я хочу разделить каждую строку cell_means на первую строку cell_means. – agf1997

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