缓慢迭代多索引 pandas DataFrame

slow iterating through multi index pandas DataFrame

我有一个包含三个索引的大数据框

df = df.set_index(['i','j','k']

我已经确定 feasible_i_j 行满足 'i' 和 'j' 的给定公式,以便我可以使用 .loc[=19 过滤 df =]

rows = df.loc[feasible_i_j[0],feasible_i_j[1],:]

现在我想过滤 dataFrame 也为某些行 'k' returns True 来自某些函数 foo:

for feasible_i_j in feasible_i_js: 
    rows = df.loc[feasible_i_j[0],feasible_i_j[1],:]
    for row in range(rows.shape[0]):
        flag = foo(rows.iloc[row])

这非常缓慢且效率低下。我正在寻找 加速它的方法 ,特别是因为 foo 可以矢量化。

我会根据 post 使用此解决方案(您可能想尝试其他解决方案,看看哪个更适合您)

df= pandas.DataFrame({'a':['a','b','c'],'A':['A','B','C']})
ls=[('a','A'),('b','B')]
print(df)
rows = pandas.concat([df[df.a.eq(x) & df.A.eq(y)] for x,y in ls])

对于 foo() 函数,如果你可以对其进行矢量化,我想你可以这样调用它: df = foo(df)df['XXX'] = foo(df['XXX']) 如果没有,你可以做一个 df=df.apply(lambda row: foo(row),axis=1)