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

Pandas使用shift方法填充厂商字段仅首行生效的问题求助

解决Pandas中厂商名称批量填充到对应车型行的问题

我明白你现在的问题了——你的DataFrame里Make/Model列混着厂商名和车型名,厂商行的firstYear、style都是空值,你想把厂商名批量填充到下面所有属于它的车型行里,但之前的代码只搞定了每个厂商下的第一辆车型,后面的都没填上。其实差一步就搞定了,咱们来调整下:

正确的解决步骤

  1. 先标记出所有厂商行:当某行的firstYear和style都是NaN时,这一行就是厂商名称行,我们把manufacturor列赋值为该行的Make/Model值,其他行暂时留空。
  2. 向前批量填充厂商名:用Pandas的ffill()方法,把所有空的manufacturor行自动替换成它上方最近的非空厂商名称,这样同一个厂商下的所有车型就都会继承正确的厂商名了。

完整代码替换

把你原来的df['manufacturor'] = np.where(...)那行代码,替换成下面的完整逻辑:

import numpy as np
import pandas as pd

# 你的原始DataFrame
df = pd.DataFrame({'Make/Model': ['FORD', 'BRONCO', 'MAVERICK', 'MUSTANG', 'HONDA', 'CIVIC', 'CR-V', 'HYUNDAI', 'TUCSON', 'ELANTRA', 'TOYOTA', 'CAMERY', 'AVALON'], 'firstYear': [np.nan, 1965.0, 1970.0, 1964.0, np.nan, 1972.0, 1995.0, np.nan, 2004.0, 1990.0, np.nan, 1982.0, 2000.0], 'style': [np.nan, 'suv', 'compact', 'sport', np.nan, 'compact', 'suv', np.nan, 'suv', 'compact', np.nan, 'sedan', 'sedan'], 'number doors': [np.nan, '2, 4', '2,4 ', '2', np.nan, '2, 4', '4', np.nan, '4', '4', np.nan, '4', '4'], 'manufacturor': [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]})

# 第一步:标记厂商行
df['manufacturor'] = np.where((df['firstYear'].isna()) & (df['style'].isna()), df['Make/Model'], np.nan)
# 第二步:向前填充所有车型行的厂商名
df['manufacturor'] = df['manufacturor'].ffill()

处理后的效果

完成后,你的manufacturor列会正确填充所有对应车型的厂商名称,关键部分示例:

Make/Modelmanufacturor
FORDFORD
BRONCOFORD
MAVERICKFORD
MUSTANGFORD
HONDAHONDA
CIVICHONDA

之前的代码只取了上一行的值,没法持续填充后续的车型行,而ffill()正好解决了这个批量填充的需求,让同一个厂商下的所有车型都能自动继承厂商名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 10:52:27