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

如何高效实现DataFrame中Month列到Year列的值映射(替代循环)

嘿,我懂你现在的痛点——用for循环处理虽然能实现需求,但在Pandas里确实有更高效、更符合Pandas风格的向量化方法,不管是代码简洁度还是处理大数据集的速度都完胜循环。下面给你两种常用的优化方案:

方案一:提取后缀映射年份

这种方法适合后缀规则固定的场景,先从Month列里提取出后缀的数字,再通过映射表转换成对应年份:

import pandas as pd

# 提取后缀数字,没有后缀的填充为'0'
Products['year_suffix'] = Products['Month'].str.extract(r'\.(\d)?', expand=False).fillna('0')

# 定义后缀到年份的映射关系
year_mapping = {'0': '2015', '1': '2016', '2': '2017'}
# 生成Year列
Products['Year'] = Products['year_suffix'].map(year_mapping)

# 不需要中间列的话可以删掉
Products.drop('year_suffix', axis=1, inplace=True)

方案二:链式条件判断(numpy.where)

如果你的条件不多(就这三个年份),用numpy.where链式判断会更直接,一行代码搞定:

import numpy as np

Products['Year'] = np.where(
    Products['Month'].str.contains('\.1'), '2016',
    np.where(Products['Month'].str.contains('\.2'), '2017', '2015')
)

为什么这些方法更好?

  • 速度更快:Pandas的向量化操作是基于底层C实现的,比Python层面的for循环效率高几个量级,数据量越大差距越明显;
  • 代码更简洁:不用手动遍历每一行,逻辑一目了然;
  • 避免警告:原来的循环方式直接修改Products['Year'][i]属于链式索引,很容易触发SettingWithCopyWarning,向量化方法则不会有这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:58:47