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

Pandas如何基于双DataFrame条件,实现lact与lact-1的关联合并

匹配前一期泌乳期数据的Pandas合并实现

要实现df2的Lact关联df1的Lact-1的合并逻辑,有两种常用的实现方式:

方法1:构造临时匹配键合并

核心逻辑是给df1的泌乳期字段加1,让前一期的泌乳期数值刚好和df2的目标泌乳期数值匹配,再按常规规则合并即可,适合仅需要匹配前1期的场景:

# 提取df1所需字段,将原泌乳期重命名后构造匹配用的泌乳期字段
df1_match = df1[['NID', 'Lact', 'M-305', 'PI-M']].rename(columns={'Lact': 'original_lact'})
df1_match['Lact'] = df1_match['original_lact'] + 1

# 按NID和匹配用的泌乳期字段合并
df3 = pd.merge(df2, df1_match[['NID', 'Lact', 'M-305', 'PI-M']], on=['NID', 'Lact'], how='left')

运行后df2中Lact=7的行,会匹配到df1中original_lact=6对应的M-305=9360、PI-M=112的结果,符合需求。

方法2:分组偏移生成前一期字段

如果需要批量处理多期偏移匹配的场景,可以先对df1按NID分组后做数值偏移,直接生成对应前一期的指标字段再合并:

# 按NID分组后,将指标向下偏移1行,得到同NID下前一期的数值
df1['prev_M-305'] = df1.groupby('NID')['M-305'].shift(1)
df1['prev_PI-M'] = df1.groupby('NID')['PI-M'].shift(1)

# 直接与df2合并,此时Lact=7的行对应的prev字段就是Lact=6的数值
df3 = pd.merge(df2, df1[['NID', 'Lact', 'prev_M-305', 'prev_PI-M']], on=['NID', 'Lact'], how='left')

这种方法拓展性更强,如果需要匹配前2期、前3期数据,只需要调整shift()的参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:54:07