Python 在数据帧中使用.loc时性能不佳

Python 在数据帧中使用.loc时性能不佳,python,pandas,Python,Pandas,我试图通过这个数据帧的索引来组合某些列,我使用一个简单的pd.cov()函数来计算u_centro、v_centro和w_centro的方差和协方差 但是,当我尝试使用.loc分割这些值时,性能非常慢(非常慢!)。 例如: df_uu = df.loc[(iz_centro,'u_centro'),'u_centro'] startime = datetime.now() mask = df.index.get_level_values(1) == 'u_centro' df.loc

我试图通过这个数据帧的索引来组合某些列,我使用一个简单的pd.cov()函数来计算u_centro、v_centro和w_centro的方差和协方差

但是,当我尝试使用.loc分割这些值时,性能非常慢(非常慢!)。 例如:

df_uu = df.loc[(iz_centro,'u_centro'),'u_centro']
 startime = datetime.now()

 mask = df.index.get_level_values(1) == 'u_centro'
 df.loc[mask]

 print(datetime.now() - startime) # 0:00:00.001417
我想要所有的u_centro和u_centro的组合。结果正是我想要的,但完成这项工作所花费的时间是10分钟以上

全部数据:

有不同的方法可以做到这一点,但最好的性能是使用诸如
xs
(谢谢@Paul H)或布尔掩码之类的矢量化函数,例如:

df_uu = df.loc[(iz_centro,'u_centro'),'u_centro']
 startime = datetime.now()

 mask = df.index.get_level_values(1) == 'u_centro'
 df.loc[mask]

 print(datetime.now() - startime) # 0:00:00.001417

我不知道在这种情况下,
1417µs
是否是一个大问题。

有不同的方法可以做到这一点,但最好的性能是使用向量化函数,如
xs
(感谢@Paul H)或布尔掩码,例如:

df_uu = df.loc[(iz_centro,'u_centro'),'u_centro']
 startime = datetime.now()

 mask = df.index.get_level_values(1) == 'u_centro'
 df.loc[mask]

 print(datetime.now() - startime) # 0:00:00.001417

我不知道在这种情况下,
1417µs
是否是一个大问题。

您的索引是唯一的吗?请尝试:
df.xs('u_centro',level=1,axis='index',drop_level=False)
谢谢,这很好用。但是在这种情况下.loc失败是有原因的吗?如果没有看到所有的代码,这是不可能的。它看起来像是在循环遍历
iz_centro
的值并附加到输出数据帧。追加将很慢。但同样,这只是猜测。我只是将df.groupby('iz_centro').cov()应用于这个csv:,从而生成我发布的数据帧。无论如何,再次感谢。您的索引唯一吗?请尝试:
df.xs('u_centro',level=1,axis='index',drop_level=False)
谢谢,这很好用。但是在这种情况下.loc失败是有原因的吗?如果没有看到所有的代码,这是不可能的。它看起来像是在循环遍历
iz_centro
的值并附加到输出数据帧。追加将很慢。但同样,这只是猜测。我只是将df.groupby('iz_centro').cov()应用于这个csv:,从而生成我发布的数据帧。无论如何,再次谢谢你。