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

如何在Pandas合并DataFrame后仅保留首条匹配的price值,其余设为0

高效实现Pandas合并后仅保留每组首条price值

方法一:利用duplicated标记重复组

合并后,每个id+month组合的price值完全相同(因为df2中每个组合仅存一条记录),只需标记每组中除第一行外的重复行,将其price设为0即可:

# 执行左连接
merged_df = df1.merge(df2, how='left', on=['id', 'month'])
# 标记每个(id, month)组的非首行
duplicate_mask = merged_df.duplicated(subset=['id', 'month'], keep='first')
# 将非首行的price设为0
merged_df.loc[duplicate_mask, 'price'] = 0

方法二:分组后用transform处理

通过groupby按id和month分组,利用transform对每组的price列做针对性赋值,仅保留首条记录的原price,其余设为0:

merged_df = df1.merge(df2, how='left', on=['id', 'month'])
# 分组处理price列
merged_df['price'] = merged_df.groupby(['id', 'month'])['price'].transform(
    lambda grp: grp.where(grp.index == grp.index[0], 0)
)

效率说明

以上两种方法均为矢量化操作,基于Pandas底层的C优化实现,时间复杂度为O(n)(n为合并后DataFrame的行数),远优于逐行遍历的O(n²)方案,处理大数据量时优势明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 22:54:17