python - 单调过滤 Pandas Groupby
问题描述
假设我有一个这样的值的数据框:
df = pd.DataFrame([ [ 23, .30], [ 23, .29], [ 23, .33], [ 23, .29], [ 23, .31], [ 25, .31], [ 25, .32], [ 25, .22], [30, 0.9], [30, 0.91], [30, 0.92] ], columns=['Day', 'Rate'] )
我想按天分组,但只过滤掉严格增加的值。所以对于上面的数据框,答案应该是这样的:
ans = pd.DataFrame([ [ 23, .30], [ 23, .33], [ 25, .31], [ 25, .32], [30, 0.9], [30, 0.91], [30,
0.92] ], columns=['Day', 'Rate'] )
实际上,此数据框可能非常大(> 10000 行),因此我想避免在组对象上编写自定义应用程序。有没有一种快速(有效)的方法来实现这一目标?
谢谢。
解决方案
新的“汇率”可以通过 获得groupby-cummax
。只需将 Rate 替换为新值并删除重复项。.reset_index()
是可选的。
df["Rate"] = df.groupby("Day").cummax()
df = df.drop_duplicates().reset_index(drop=True)
输出:
print(df)
Day Rate
0 23 0.30
1 23 0.33
2 25 0.31
3 25 0.32
4 30 0.90
5 30 0.91
6 30 0.92
推荐阅读
- xamarin.forms - Xamarin 表单,滚动视图不会滚动到 StackLayout
- javascript - 具有对象属性拼接的角度对象 arr
- asp.net-core - ASP.NET Core 不让我登录
- c# - Web Agora.io DYNAMIC_KEY_EXPIRED
- android - Playstore 向某些用户显示旧版本 虽然有新版本可用
- haskell - 我如何在我的班级中扩展 Haskell 的类型类
- javascript - 历史 API | 如何监听 forward() 事件
- angularjs - dataSource.filter 过滤在前端不可见的 ID
- azure-ad-b2c - 带有 Rest API 的 Azure B2C 自定义策略未在请求中发送 objectId
- java - 为什么当我尝试在这个百分比计算器中将我的 int 转换为 double 时结果总是 0