首页 > 解决方案 > 单调过滤 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 行),因此我想避免在组对象上编写自定义应用程序。有没有一种快速(有效)的方法来实现这一目标?

谢谢。

标签: pythonpandas

解决方案


新的“汇率”可以通过 获得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

推荐阅读