Python 单调滤波

Python 单调滤波,python,pandas,Python,Pandas,假设我有这样一个值的数据框架: 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

假设我有这样一个值的数据框架:

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'] )
我想按天分组,但只过滤掉严格递增的值。因此,对于上述数据帧,答案如下所示:

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
获得。只需将速率替换为新值并删除重复项
.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