2013-07-30 6 views
3

Я читал об иерархическом индексе и мультииндексе в кадре данных pandas, но, похоже, все это для упорядоченных меток. Например, мои данные выглядит следующим образом:Групповые данные на основе метки столбцов в pandas dataframe

enter image description here

И я хочу, чтобы иметь возможность группировать данные вместе на основе, т.е. этикетки столбца. совокупность всех столбцов с «d» в строке 3 вместе путем усреднения.

Каков наилучший способ получить данные Excel (или csv, если это абсолютно необходимо) в dataframe, чтобы я мог выполнять эти операции и как бы я мог их выполнять?

Любые советы или ссылки будут оценены

EDIT

Я попытался загрузки данных из CSV, используя следующую команду:

data = pd.read_csv('Dataset.csv', index_col=0, header=[0,1,2,3], parse_dates=True) 

, который дает мне это, когда загружен:

<class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 18 entries, 2013-05-27 10:31:00 to 2013-07-24 11:31:00 
Data columns (total 40 columns): 
(1, mix, d, n)  18 non-null values 
(2, aq, s, n)  18 non-null values 
(3, gr, s, n)  18 non-null values 
(4, mix, d, n)  18 non-null values 
(5, aq, d, n)  17 non-null values 

Я просто не уверен, куда идти оттуда.

+0

где вы читаете данные из? Файл Excel или CSV? если это так, посмотрите в CSV-модуль в Python. – Oz123

+0

Я бы предпочел читать из excel, но я просмотрел преобразование в csv, а затем поставил заголовки в виде строк, с которыми я хочу сгруппировать, но я не знаю, куда идти оттуда. Я добавлю изменения и покажу вам, что я имею в виду. – pbreach

+0

вы пытались с 'data ['3']' как 10 мин. показывает учебник? – Oz123

ответ

4

Вы можете использовать столбцы (axis=1) groupby и принять mean:

In [11]: df = pd.DataFrame(np.random.randn(4, 3), columns=[[1, 2, 3], ['d', 's', 'd']]) 

In [12]: df.columns.names = ['PLOT', 'DEPTH'] 

In [13]: df 
Out[13]: 
PLOT   1   2   3 
DEPTH   d   s   d 
0  -0.557490 -1.231495 -0.333703 
1  0.513394 1.046577 0.596306 
2  -0.404606 -1.615080 -0.694562 
3  -0.078497 -0.683405 0.056857 

In [14]: df.groupby(level='DEPTH', axis=1).mean() 
Out[14]: 
DEPTH   d   s 
0  -0.445596 -1.231495 
1  0.554850 1.046577 
2  -0.549584 -1.615080 
3  -0.010820 -0.683405 
+0

Это именно то, что я хотел сделать! Я сделал некоторые изменения этого ранее, но не сделал это правильно. Благодаря! – pbreach