假设我有一个Pandas DataFrame:

import pandas as pd

df = pd.DataFrame({'a': [1,2,2,2,2,1,1,1,2,2]})
>> df
   a
0  1
1  2
2  2
3  2
4  2
5  1
6  1
7  1
8  2
9  2

如果超过某个阈值n,我想删除重复项,并用该最小值替换它们.让我们说这是n=3.然后,我的目标数据帧是

>> df
   a
0  1
1  2
2  2
3  2
5  1
6  1
7  1
8  2
9  2

编辑:每一组连续的重复都是单独考虑的.在本例中,应该保留第8行和第9行.

推荐答案

您可以 for each 连续的组创建唯一值,然后使用groupbyhead:


group_value = np.cumsum(df.a.shift() != df.a)
df.groupby(group_value).head(3)

# result:

   a
0  1
1  2
2  2
3  2
5  1
6  1
7  1
8  3
9  3

Python相关问答推荐

在Python中添加期货之间的延迟

如何在Python中按组应用简单的线性回归?

如何使用Selenium访问svg对象内部的元素

如何防止Plotly在输出到PDF时减少行中的点数?

Polars:使用列值引用when / then表达中的其他列

如何使用Jinja语法在HTML中重定向期间传递变量?

Matlab中是否有Python的f-字符串等效物

为什么我的Python代码在if-else声明中的行之前执行if-else声明中的行?

使用miniconda创建环境的问题

_repr_html_实现自定义__getattr_时未显示

发生异常:TclMessage命令名称无效.!listbox"

部分视图的DataFrame

使用Python从URL下载Excel文件

如何合并两个列表,并获得每个索引值最高的列表名称?

Pandas Data Wrangling/Dataframe Assignment

Polars将相同的自定义函数应用于组中的多个列,

如何使用OpenGL使球体遵循Python中的八样路径?

具有相同图例 colored颜色 和标签的堆叠子图

循环浏览每个客户记录,以获取他们来自的第一个/最后一个渠道

如何使用正则表达式修改toml文件中指定字段中的参数值