Ber*_*989 4 percentile dataframe python-3.x pandas pandas-groupby
我对 python pandas 有以下问题(我对它比较陌生):我有一个简单的数据集,其中包含日期列和相应的值列。我可以通过执行以下操作来按日期和值对此数据框进行排序:
df = df.sort_values(['date', 'value'],ascending=False)
Run Code Online (Sandbox Code Playgroud)
我得到这个:
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
Run Code Online (Sandbox Code Playgroud)
现在,我想做的是去掉每个月(每个组)的值列的最低第五个百分位。我知道我应该使用 groupby 方法,也许还应该使用一个函数:
df = df.sort_values(['date', 'value'],ascending=False).groupby('date', group_keys=False).apply(<???>)
Run Code Online (Sandbox Code Playgroud)
这 ???这是我正在努力的地方。我知道如何整体抑制排序数据帧上的最低第 5 个百分位,例如通过执行以下操作:
df = df[df.value > df.value.quantile(.05)]
Run Code Online (Sandbox Code Playgroud)
这是 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1440 次 |
| 最近记录: |