我有以下数据框架
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的值,这是该组中的下一个最高值。这里有什么帮助吗?
答案 0 :(得分:1)
您可以将其实施为5个步骤:
假设您的数据框名为 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]