2014-02-27 217 views
4

我正在使用pandas中的multiindexing數據框,並且想知道我是否應該多行索引行或列。多重索引行與大熊貓的列DataFrame

我的數據看起來是這樣的: DataTable

代碼:

import numpy as np 
import pandas as pd 
arrays = pd.tools.util.cartesian_product([['condition1', 'condition2'], 
              ['patient1', 'patient2'], 
              ['measure1', 'measure2', 'measure3']]) 
colidxs = pd.MultiIndex.from_arrays(arrays, 
            names=['condition', 'patient', 'measure']) 
rowidxs = pd.Index([0,1,2,3], name='time') 
data = pd.DataFrame(np.random.randn(len(rowidxs), len(colidxs)), 
        index=rowidxs, columns=colidxs) 

在這裏,我選擇多指標列,與大熊貓數據幀由一系列的理由,我的數據最終是一串時間序列(因此在這裏按時間索引)。

我有這個問題,因爲它似乎有行和列之間的一些不對稱multiindexing。例如,在this文檔網頁中,它顯示query如何工作於行多索引數據幀,但是如果數據幀是列多索引,則文檔中的命令必須用df.T.query('color == "red"').T之類的內容替換。

我的問題看起來可能有點愚蠢,但我想看看在數據框的多重索引行與列之間是否有區別(如上面的query例子)。

謝謝。

+0

這真的取決於你想如何操縱,輸出和查看你的數據。我懷疑行上的多索引更有用(可能更有效,但我真的不知道)。如果你打算操縱按列索引的數據範圍,那麼是的,多列對你來說更好。 – Will

+0

這是一個很好的問題,因爲某些領域的數據集通常是時間序列,但可能會分成一系列類別,如示例中所示。按列分析MultiIndex會有幫助。 – Hamid

回答

0

我稱之爲行/一些常用的操作爲數據幀列傾向粗略的個人總結:

  • []:列第一
  • get:列僅
  • 屬性訪問作爲索引:列僅
  • query:行僅
  • loc, iloc, ix:行第一
  • xs:行第一
  • sortlevel:行第一
  • groupby:行第一

「行第一」是指該操作預計行索引作爲第一個參數,並在柱操作索引人需要使用[:, ]或指定axis=1;
「僅行」表示該操作僅適用於行索引,並且必須執行一些操作,例如轉置數據幀以對列索引進行操作。

基於此,看起來multiindexing行稍微方便一些。

我的一個自然問題:爲什麼熊貓開發者不統一DataFrame操作的行列傾向?例如,[]loc/iloc/ix是索引數據幀的兩種最常見的方式,但是一個切片列和其他切片行似乎有點奇怪。

+1

loc/iloc/ix是多軸索引器,能夠同時索引所有軸; []只處理列,並且是一個類似訪問器的字典;這些都是非常獨特和有用的權利。最常見的操作可能是[]訪問;這使得難以做到這一點只會使代碼更加冗長 – Jeff