我有一个数据帧
df = url browser loadtime
A safari 1500
A safari 1650
A Chrome 2800
B IE 3150
B safari 3300
C Chrome 2650
. . .
. . .
我需要使用3 QI经验法则计算每个应用程序加载时间的上离群值,然后过滤df,只保留行,其中对于每个应用程序,加载时间小于同一应用程序的上离群值
我就是这样继续的
def upper_outlier(x):
return np.percentile(x, 75) + 3*(np.percentile(x,75)-np.percentile(x,25))
## Find the upper outlier threshold per app
df_grouped = df.groupby("app")['loadtime'].agg([('upper_outlier', lambda x : upper_outlier(x))])
这样,对于每个应用程序,我都有相应的上离群值
df_grouped
过滤df
df_new = pd.DataFrame()
for app in df.app.unique():
df_new = pd.concat([df_new,df.loc[(df.app==app)&(df.loadtime<df_grouped.loc[app, 'upper_outlier'])]], axis = 0).reset_index(drop=True)
for循环需要很长时间,因为我有很多数据。有没有更干净的Python式的方法
您可以尝试将计算与原始数据帧合并
然后过滤
不确定这是否更有效,但似乎更直截了当
相关问题 更多 >
编程相关推荐