【发布时间】:2020-04-09 20:14:15
【问题描述】:
我对 python pandas 有以下问题(我对它比较陌生):我有一个简单的数据集,其中包含日期列和相应的值列。我可以通过执行以下操作按日期和值对这个 Dataframe 进行排序:
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(<???>)
???是我挣扎的地方。我知道如何将排序后的 Dataframe 上的最低 5% 抑制为一个整体,例如通过执行以下操作:
df = df[df.value > df.value.quantile(.05)]
这是 StackOverflow 上另一篇文章的主题。我知道我也可以使用 numpy 来执行此操作,并且速度要快得多,但我的问题实际上是如何在 Dataframe 中独立地将其应用于 EACH GROUP(值列的每个部分按月份排序),而不仅仅是整个数据框。
任何帮助将不胜感激 非常感谢你, 亲切的问候, 贝尔蒂
【问题讨论】:
标签: python-3.x pandas dataframe pandas-groupby percentile