我有以下数据框架
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
我需要计算["'',''','sector','number'的每组的"计数"的第90个百分位数,并返回该组中下一个最接近的记录。
例如:
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的值,这是小组中下一个最高的值。这里有任何帮助吗?
您可以作为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]