缓慢迭代多索引 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)
我有一个包含三个索引的大数据框
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
可以矢量化。
我会根据
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)