Ber*_*989 4 percentile dataframe python-3.x pandas pandas-groupby
我对 python pandas 有以下问题(我对它比较陌生):我有一个简单的数据集,其中包含日期列和相应的值列。我可以通过执行以下操作来按日期和值对此数据框进行排序:
df = df.sort_values(['date', 'value'],ascending=False)
我得到这个:
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 方法,也许还应该使用一个函数:
df = df.sort_values(['date', 'value'],ascending=False).groupby('date', group_keys=False).apply(<???>)
这 ???这是我正在努力的地方。我知道如何整体抑制排序数据帧上的最低第 5 个百分位,例如通过执行以下操作:
df = df[df.value > df.value.quantile(.05)]
这是 StackOverflow 上另一篇文章的主题。我知道我也可以使用 numpy 来执行此操作,而且速度要快得多,但我的问题实际上是如何将其独立应用于 Dataframe 中的每个组(值列的每个部分按月排序),而不仅仅是整个数据框。
任何帮助将不胜感激非常感谢你,亲切的问候,伯蒂
与 lambda 函数一起用于GroupBy.transform具有与原始大小相同的 Series DataFrame,因此可以按以下方式过滤boolean indexing:
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
| 归档时间: | 
 | 
| 查看次数: | 1440 次 | 
| 最近记录: |