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

求助:Pandas中使用shift批量填充manufacturor字段的问题

解决DataFrame中品牌信息向下填充至对应车型的问题

你的问题出在仅通过相邻行赋值,没有实现连续前向填充,所以只能给第一个车型行填充品牌。以下是完整解决方案:

核心思路

  1. 先识别品牌行:当firstYear和style同时为NaN时,该行是品牌行,提取Make/Model作为品牌值。
  2. 用前向填充(ffill)将品牌值传递给后续所有属于该品牌的车型行,直到遇到下一个品牌行。

完整代码

import numpy as np
import pandas as pd

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]
})

# 1. 标记品牌行,提取品牌值
df['manufacturor'] = np.where(
    df['firstYear'].isna() & df['style'].isna(),
    df['Make/Model'],
    np.nan
)

# 2. 前向填充品牌值到后续所有车型行
df['manufacturor'] = df['manufacturor'].ffill()

# 可选:如果不需要品牌行自身显示manufacturor值,执行以下代码
# df.loc[df['firstYear'].isna() & df['style'].isna(), 'manufacturor'] = np.nan

print(df)

代码说明

  • 第一步通过np.where筛选出所有品牌行,将对应Make/Model赋值给manufacturor,非品牌行暂设为NaN。
  • 第二步的ffill()方法会自动将每个品牌值向下填充,覆盖后续所有属于该品牌的车型行,直到遇到下一个品牌值。
  • 可选步骤用于清除品牌行自身的manufacturor值,根据需求选择是否执行。

运行结果示例

处理后的数据框中,所有车型行的manufacturor都会正确对应所属品牌:

Make/ModelfirstYearstylenumber doorsmanufacturor
FORDNaNNaNNaNFORD
BRONCO1965.0suv2, 4FORD
MAVERICK1970.0compact2,4FORD
MUSTANG1964.0sport2FORD
HONDANaNNaNNaNHONDA
CIVIC1972.0compact2, 4HONDA
...............

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 15:24:52