将下一条记录提取到 Pandas 列中的百分位值

Fetch the Next Record to the percentile value in a Pandas Column

我有以下数据帧

Year    Sector  Number   Count
2015    AA      173      277
2015    AA      172      278
2015    AA      173      234
2015    BB      173      234
2015    BB      171      273
2015    BB      173      272
2015    CC      172      272
2015    CC      172      234
2015    CC      173      234
2015    CC      173      345
2016    AA      173      277
2016    AA      173      277
2016    BB      173      277
2016    BB      173      277
2016    CC      173      277
2016    CC      173      272
2016    CC      170      273
2016    CC      170      275

我需要为每组 ['Year'、'Sector'、'Number'] 和下一组 return 计算 'Count' 的第 90 个百分位值组中最接近的最高记录。

例如:

In the group 
2015    CC      172      272
2015    CC      172      234
2015    CC      173      234
2015    CC      173      345

90th 百分位值为 323.1,使用 np.percentile() 函数。我想要 return 值 345,这是该组中第二高的值。有什么帮助吗?

您可以将其实施为 5 个步骤:

  • 分组依据
  • 找到 90% 的百分位数
  • 找到上面的所有值
  • 保留最小的id
  • 检索所有必要的 ID

假设您的数据框名为 df:

ids = [data[data.Count>=np.percentile(data.Count,90)].Count.idxmin()
       for group,data in df.groupby('Sector')]

df.loc[ids]

我将把它分解成几个步骤:

1 - 按扇区迭代组:

for group,data in df.groupby('Sector')

2 - 找到百分位数:

perc = np.percentile(data.Count,90)

3 - 过滤值:

subdf = data[data.Count>=np.percentile(data.Count,90)]

4 - 找到最小值的id:

subdf.Count.idmin()

5 - return 具有最小 ID 的行:

df.loc[ids]