2013-06-11 22 views
2

爲更好地解釋這個問題,我會給一些具體的使用熊貓圖書館,但我認爲這個問題的核心思想是相當籠統的,正如標題所述。更精緻的方式來編碼的重疊水平

一般問題:什麼是更優雅的方式來編碼無數循環重疊。

具體例子:拿一個功能doStruf(DF,listLevels)用df是一個數據框大熊貓對象和listLevels是的hierachically組織功能(該名稱的列表,例如,人,教室,學校,...狀態)在df中描述的觀察單位。對於doStruf(DF,[「人」,「類」,......,「狀態」])我想doStruf功能,使像

for person in unique(array(df["person"])): 

    personData = df[df["person"] == person] 
    for classroom in unique(array(personData["classrooms"])) : 
     classroomData = personData[personData["classroom"] == classroom] 

     ... arbritrary number of loops imbrication depending on len(listLevels) ... 


      varYData = varXData[varXData["varY"] == varY] 
      for state in unique(array(varYData["states"])) : 
       stateData = varYData[varYData["state"] == state] 

       ... do stuff using stateData ... 

什麼是應對更清潔的方式這種運行時定義的循環堆疊數量?

+0

@Andy海登已編輯。 –

+0

想一想,我想遞歸可能是最好的方法(如果沒有其他人有更好的建議,我會給一段代碼),但我非常感謝任何建議。 –

+0

羣是不是爲你工作? –

回答

2

您可以使用groupby做到這一點:

g = df.groupby(['person', 'classes', ..., 'varY', 'states']) 

g.apply(lambda stateData: do_stuff(stateData))