如何删除pandas dataframe中同公司重复行,仅保留成交量最高的条目?
实现逻辑
核心是按公司名称分组,筛选每组内成交量最高的条目即可,两种常用实现方案如下:
方法1:排序后去重(最简洁)
逻辑是先按成交量降序排序,再按公司名称去重,自动保留每组第一条也就是成交量最高的条目:
# 假设你的DataFrame名为stock_df,成交量字段名为volume,公司名称字段名为company_name res_df = stock_df.sort_values('volume', ascending=False).drop_duplicates('company_name', keep='first') # 如果需要保持原表的行顺序,可再加一步按原索引排序 res_df = res_df.sort_index()
方法2:分组取最大值索引(性能更高,适合大数据量)
逻辑是直接按公司分组,取每组成交量最大值对应的行索引,再筛选原表:
# 取每组成交量最高的行索引 max_volume_idx = stock_df.groupby('company_name')['volume'].idxmax() # 按索引筛选行得到结果 res_df = stock_df.loc[max_volume_idx].reset_index(drop=True)
注意事项
- 执行前先确认成交量
volume字段为数值类型,如果是字符串格式可先转换:stock_df['volume'] = stock_df['volume'].astype(int) - 如果同公司存在多条成交量同为最高的条目,上述两种方法默认只保留第一条,若需要全部保留可以用如下逻辑:
res_df = stock_df[stock_df.groupby('company_name')['volume'].transform(lambda x: x == x.max())]
内容的提问来源于stack exchange,提问作者user3186371
相关产品推荐
相关产品推荐

