假设我有一个像这样的值的数据框:
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行),因此我想避免在组对象上编写自定义应用。是否有一种快速(有效)的方法来实现这一目标?
谢谢。
答案 0 :(得分:1)
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