Pandas如何按多列分组删除组内ValIssueDate更大的冗余行
解决方案
你可以通过两种常用的pandas方法实现需求,核心逻辑为:按RateCompany、gs、RB三列分组后,保留每组中ValIssueDate取值最小的行。
方法1:groupby + idxmin (更高效直接)
import pandas as pd from io import StringIO # 构造示例DataFrame df_str = """ RateCompany gs RB ValIssueDate 115 T G 54 19580101 116 T G 54 19870101 336 T S 54 19580101 337 T S 54 19870101 338 T j 53 19970101 """ df = pd.read_csv(StringIO(df_str.strip()), sep='\s+') # 核心处理代码 result = df.loc[df.groupby(['RateCompany', 'gs', 'RB'])['ValIssueDate'].idxmin()] # 若需要重置索引可以加上下面这行 # result = result.reset_index(drop=True) print(result)
方法2:排序 + 去重(灵活适配更复杂的筛选规则)
# 先按分组列和ValIssueDate升序排序,再按分组列去重保留第一条 result = df.sort_values(by=['RateCompany', 'gs', 'RB', 'ValIssueDate'])\ .drop_duplicates(subset=['RateCompany', 'gs', 'RB'], keep='first')
两种方法运行后均可得到你期望的输出结果:
RateCompany gs RB ValIssueDate 115 T G 54 19580101 336 T S 54 19580101 338 T j 53 19970101
内容的提问来源于stack exchange,提问作者William
相关产品推荐
相关产品推荐

