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

如何修正DataFrame中每个id分组最后一行的start_quantity值

解决DataFrame分组最后一行start_quantity赋值NaN问题

你的代码出现NaN的核心原因是:直接将time==9的end_quantity列赋值给time==10的start_quantity时,两个子集的索引无法一一对应,导致不匹配的位置被填充为NaN。必须按id分组对应赋值,以下是两种可行方案:

方案1:利用分组移位(groupby+shift)

每个id组内已按time升序排列,time=10的前一行恰好是time=9,通过分组后移位的方式,可直接将每个组内的end_quantity向上移动一行,对应到下一行的start_quantity:

# 按id分组,将每个组的end_quantity向上移位一行,作为start_quantity
df['start_quantity'] = df.groupby('id')['end_quantity'].shift(1)
# 保留每个id第一行(time=1)的原始start_quantity值(第一行无前置数据)
df.loc[df['time'] == 1, 'start_quantity'] = df.loc[df['time'] == 1, 'start_quantity']

方案2:构建id映射字典精准赋值

先提取每个id对应的time=9的end_quantity值生成映射字典,再为time=10的行按id匹配赋值:

# 生成id到time=9的end_quantity的映射字典
id_end_q_map = df[df['time'] == 9].set_index('id')['end_quantity'].to_dict()
# 为time=10的行按id匹配赋值start_quantity
df.loc[df['time'] == 10, 'start_quantity'] = df.loc[df['time'] == 10, 'id'].map(id_end_q_map)

两种方案都能确保每个time=10的行精准拿到对应id的time=9的end_quantity值,不会出现NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:48:17