根据数据框中每个类别的特定值筛选数据框

2024-09-28 01:25:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧

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,只保留行,其中对于每个应用程序,加载时间小于同一应用程序的上离群值

我就是这样继续的

  1. 我使用3QI经验法则计算上离群值
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))])

这样,对于每个应用程序,我都有相应的上离群值

  1. 我使用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式的方法


Tags: 数据app应用程序dfnewnp经验chrome
1条回答
网友
1楼 · 发布于 2024-09-28 01:25:31

您可以尝试将计算与原始数据帧合并

df_grouped = df.groupby("app")['loadtime'].agg([('upper_outlier', lambda x : upper_outlier(x))]).reset_index()

dfmerged = df.merge(df_grouped, on = 'app', how = 'left')

然后过滤

dfmerged[dfmerged.loadtime<dfmerged.upper_outlier]

不确定这是否更有效,但似乎更直截了当

相关问题 更多 >

    热门问题