2

为了更好地解释这个问题,我将使用 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 ...

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

4

1 回答 1

2

您可以使用以下方法执行此操作groupby

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

g.apply(lambda stateData: do_stuff(stateData))
于 2013-06-11T20:10:43.850 回答