首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pandas:如何删除每个索引组的最低第5个百分位数?

Pandas:如何删除每个索引组的最低第5个百分位数?
EN

Stack Overflow用户
提问于 2019-12-17 18:33:24
回答 2查看 456关注 0票数 2

我对python pandas有以下问题(我对它比较陌生):我有一个简单的dataset,其中包含一列date和一列相应的值。通过执行以下操作,我可以按日期和值对此Dataframe进行排序:

代码语言:javascript
运行
复制
df = df.sort_values(['date', 'value'],ascending=False)

我得到了这个:

代码语言:javascript
运行
复制
date       value
2019-11    100
2019-11    89
2019-11    87
2019-11    86   
2019_11    45
2019_11    33
2019_11    24
2019_11    11
2019_11    8
2019_11    5
2019-10    100 
2019-10    98
2019-10    96
2019-10    94
2019_10    94
2019_10    78
2019_10    74
2019_10    12
2019_10    3
2019_10    1

现在,我想要做的是去掉每个月(每个组)值列的最低第五个百分位数。我知道我应该使用groupby方法,也许还应该使用函数:

代码语言:javascript
运行
复制
df = df.sort_values(['date', 'value'],ascending=False).groupby('date', group_keys=False).apply(<???>)

那个?就是我挣扎的地方。我知道如何在整个排序的Dataframe上隐藏最低的第5个百分位数,例如,通过执行以下操作:

代码语言:javascript
运行
复制
df = df[df.value > df.value.quantile(.05)]

这是StackOverflow上另一篇帖子的对象。我知道我也可以使用numpy来做这件事,而且它的速度要快得多,但我真正的问题是如何将它单独应用于Dataframe中的每个组(值列的每个部分按月份排序),而不仅仅是整个Dataframe。

如有任何帮助,我将不胜感激非常感谢,致以亲切的问候,Berti

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-17 18:36:12

将带有lambda函数的GroupBy.transform用于与原始DataFrame大小相同的系列,因此可以按boolean indexing进行过滤

代码语言:javascript
运行
复制
df = df.sort_values(['date', 'value'],ascending=False)

q = df.groupby('date')['value'].transform(lambda x: x.quantile(.05))
df = df[df.value > q]
print (df)
       date  value
4   2019_11     45
5   2019_11     33
6   2019_11     24
7   2019_11     11
8   2019_11      8
14  2019_10     94
15  2019_10     78
16  2019_10     74
17  2019_10     12
18  2019_10      3
0   2019-11    100
1   2019-11     89
2   2019-11     87
10  2019-10    100
11  2019-10     98
12  2019-10     96
票数 3
EN

Stack Overflow用户

发布于 2019-12-17 18:40:00

您可以创建自己的函数并对其执行apply操作:

代码语言:javascript
运行
复制
def remove_bottom_5_pct(arr):
    thresh = np.percentile(arr, 5)
    return arr[arr > thresh]

df.groupby('date', sort=False)['value'].apply(remove_bottom_5_pct)

输出

代码语言:javascript
运行
复制
date       
2019-11  0     100
         1      89
         2      87
         3      86
         4      45
         5      33
         6      24
         7      11
         8       8
2019-10  10    100
         11     98
         12     96
         13     94
         14     94
         15     78
         16     74
         17     12
         18      3
Name: value, dtype: int64
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59372323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档