使用Python Pandas删除DataFrame中指定列值累计出现超3次的行
实现方案
核心逻辑是用groupby+cumcount()对每个Name的出现顺序做累计计数,只保留计数小于3的行即可(cumcount从0开始计数,0/1/2对应前3次出现)。
完整代码示例
import pandas as pd # 构造示例DataFrame data = { 'Name': ['Bob', 'Frank', 'Bob', 'Bob', 'Bob', 'Frank', 'Bob'], 'Age': [20, 50, 21, 22, 5, 10, 60] } df = pd.DataFrame(data) # 核心过滤逻辑 df_filtered = df[df.groupby('Name').cumcount() < 3] print(df_filtered)
输出结果
Name Age 0 Bob 20 1 Frank 50 2 Bob 21 3 Bob 22 5 Frank 10
输出和需求完全匹配:Bob前3次出现的行都保留,后续第4、第5次出现的行(原索引4、6)被删除,Frank仅出现2次全部保留。
逻辑说明
df.groupby('Name').cumcount()会对每个分组内的行按原始顺序从0开始递增计数,同一个Name的第1行计数0,第2行1,第3行2,第4行3,以此类推- 筛选条件
<3刚好保留每个Name的前3次出现的所有行,后续超过3次的行自动过滤
内容的提问来源于stack exchange,提问作者pythonTron1
相关产品推荐
相关产品推荐

