You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据另一DataFrame的限制条件删除pandas DataFrame行?

根据参赛次数限制筛选Pandas数据

需求说明

现有记录竞赛分数和参赛序号Entry_No的DataFrame df,以及存储每人最大允许参赛次数Limit的DataFrame df2,需要删除df中Entry_No超过对应人员限制的行,保留符合要求的数据。

示例数据

import pandas as pd

# 生成参赛记录数据,包含姓名、分数和自动生成的参赛序号
df = pd.DataFrame({
    'Name': ['John', 'Jim', 'John','Jim', 'John','Jim','John','Jim','John','Jim','Jack','Jack','Jack','Jack'],
    'Score': [10,8,9,3,5,0, 1, 2,3, 4,5,6,8,9]
})
df['Entry_No'] = df.groupby(['Name']).cumcount() + 1

# 生成每人的参赛次数限制数据
df2 = pd.DataFrame({'Name': ['John', 'Jim', 'Jack'],'Limit': [2,3,1]})

解决方案

核心思路是先把每个人的参赛限制关联到主数据中,再进行筛选:

# 1. 合并两个DataFrame,将Limit匹配到对应人员的每一条参赛记录
merged = df.merge(df2, on='Name', how='left')

# 2. 筛选出Entry_No不超过Limit的行,同时移除Limit列
result = merged[merged['Entry_No'] <= merged['Limit']].drop('Limit', axis=1)

# 查看结果
print(result)

也可以用更简洁的链式写法:

result = df.merge(df2, on='Name').query('Entry_No <= Limit').drop('Limit', axis=1)

输出结果

运行后得到的符合要求的数据如下:

Name  Score  Entry_No
0   John     10         1
1    Jim      8         1
2   John      9         2
3    Jim      3         2
4    Jim      0         3
10  Jack      5         1

内容的提问来源于stack exchange,提问作者SOK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 15:05:31