为了更好地解释这个问题,我将使用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 ...
处理这种运行时定义的循环重叠次数的更简洁方法是什么?
答案 0 :(得分:2)
您可以使用groupby
:
g = df.groupby(['person', 'classes', ..., 'varY', 'states'])
g.apply(lambda stateData: do_stuff(stateData))