Pandas使用shift方法填充厂商字段仅首行生效的问题求助
解决Pandas中厂商名称批量填充到对应车型行的问题
我明白你现在的问题了——你的DataFrame里Make/Model列混着厂商名和车型名,厂商行的firstYear、style都是空值,你想把厂商名批量填充到下面所有属于它的车型行里,但之前的代码只搞定了每个厂商下的第一辆车型,后面的都没填上。其实差一步就搞定了,咱们来调整下:
正确的解决步骤
- 先标记出所有厂商行:当某行的
firstYear和style都是NaN时,这一行就是厂商名称行,我们把manufacturor列赋值为该行的Make/Model值,其他行暂时留空。 - 向前批量填充厂商名:用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/Model | manufacturor |
|---|---|
| FORD | FORD |
| BRONCO | FORD |
| MAVERICK | FORD |
| MUSTANG | FORD |
| HONDA | HONDA |
| CIVIC | HONDA |
之前的代码只取了上一行的值,没法持续填充后续的车型行,而ffill()正好解决了这个批量填充的需求,让同一个厂商下的所有车型都能自动继承厂商名称。
内容的提问来源于stack exchange,提问作者KBD
相关产品推荐
相关产品推荐

