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

如何在Pandas中按同颜色分组对num2列执行向前填充(ffill)?

解决方案

失效原因

  • 链式索引问题:df[df['color'] == color]['num2']返回的是原DataFrame的副本,对副本赋值、或者加inplace=True修改的都是副本,不会生效到原表。
  • 列名大小写不匹配:你示例中颜色列名是Color(首字母大写),如果代码里写的是小写color,会导致取值错误无法匹配分组。
  • 额外注意:如果你的na是字符串格式,需要先替换为pandas可识别的空值NaN,否则fillna不会处理。

操作步骤

  1. (可选,仅当na为字符串时执行)将字符串na转成NaN:
import numpy as np
df['num2'] = df['num2'].replace('na', np.nan)
  1. 分组向前填充,一行代码即可完成需求:
df['num2'] = df.groupby('Color')['num2'].fillna(method='ffill')

执行后会严格按颜色分组做向前填充:同组内空值才会取同组上一行的有效值填充,分组首行的空值不会被其他分组的值填充,完全匹配你的预期结果。

循环写法修正(如果你需要保留循环逻辑)

如果非要用循环实现,要改用loc直接定位原表的行和列,避免生成副本:

for color in df['Color'].unique():
    color_mask = df['Color'] == color
    df.loc[color_mask, 'num2'] = df.loc[color_mask, 'num2'].fillna(method='ffill')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:54:00