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

如何在Pandas中按日期匹配Variant,将df2的Qty加到df1当月末的Qty

pandas实现匹配Variant并累加qty到对应月份最后一条记录

需求描述

现有两个DataFrame:

  • df1:包含日期、Variants、qty字段,同一Variant在对应月份有多条日期记录
  • df2:包含Variants、qty字段,存储需要累加的qty值

需完成以下操作:

  • 匹配df1和df2中的Variants
  • 将df2中匹配Variant的qty值,加到df1对应Variant所在月份最后一个日期记录的qty字段上
  • 非最后日期的记录qty保持不变

示例:
df1中Variant A的2022年1月最后日期为31日,对应qty为2;df2中Variant A的qty为5。处理后,df1中Variant A在31日的qty变为7,其余日期记录不变。

实现代码

import pandas as pd

# 确保df1的日期列是datetime类型
df1['Date'] = pd.to_datetime(df1['Date'])

# 为df1添加年月标识,用于分组定位每月最后一条记录
df1['year_month'] = df1['Date'].dt.to_period('M')

# 找出每个Variant+年月组合的最后一条记录的索引
last_dates_idx = df1.groupby(['Variants', 'year_month'])['Date'].idxmax()

# 合并df2的qty到df1,匹配不到的Variant填充0
df1 = df1.merge(df2, on='Variants', how='left', suffixes=('', '_add'))
df1['qty_add'] = df1['qty_add'].fillna(0)

# 仅对每月最后一条记录的qty进行累加
df1.loc[last_dates_idx, 'qty'] += df1.loc[last_dates_idx, 'qty_add']

# 清理临时辅助列
df1 = df1.drop(columns=['year_month', 'qty_add'])

# 输出处理后的结果
print(df1)

代码说明

  1. 日期格式转换:将df1的日期列转为datetime类型,确保后续年月分组、最大日期查找的准确性
  2. 年月分组标识:生成year_month列,用于按Variant+月份维度分组
  3. 定位最后记录索引:通过groupby结合idxmax,精准定位每个Variant对应月份的最后一条日期记录位置
  4. 合并数据:将df2的qty值合并到df1中,对未匹配到的Variant填充0,避免空值运算报错
  5. qty累加操作:仅对每月最后一条记录的qty字段执行累加,不影响其他日期的记录
  6. 清理临时列:删除过程中生成的辅助列,得到结构整洁的最终结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:52:38