将下一个记录获取到Pandas列中的百分位数值

时间:2017-06-05 06:37:54

标签: python pandas percentile pandas-groupby

我有以下数据框架

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

我需要计算“计数”的第90个百分点值。对于[' Year',' Sector',' Number']的每一组,并返回该组中下一个最接近的最高记录。

例如:

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

使用np.percentile()函数,第90百分位数值为323.1。我想要返回345的值,这是该组中的下一个最高值。这里有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

您可以将其实施为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 - 返回id最小的行:

df.loc[ids]