更优雅的方式来编码任意数量的imbrication级别

时间:2013-06-11 19:25:26

标签: python pandas nested-loops

为了更好地解释这个问题,我将使用pandas库给出一些细节,但我认为问题的核心思想非常普遍,正如标题所述。

一般性问题:编码循环重复数据的优雅方法是什么?

具体示例:使用函数 doStruf(df,listLevels),其中df是pandas DataFrame对象,listLevels是层次组织的功能名称列表(例如,人,教室,学校, ...,状态)df中描述的观察单位。对于 doStruf(df,[“person”,“classes”,...,“states”])我希望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 ...

处理这种运行时定义的循环重叠次数的更简洁方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用groupby

执行此操作
g = df.groupby(['person', 'classes', ..., 'varY', 'states'])

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