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

如何在data frame中基于year列创建名为decade的年代标签新列

实现方案

以下提供Python(pandas)和R两种常用数据处理环境的实现方法:

Python(pandas 环境)

核心思路是先将年份向下取整到年代起始值(比如1965取整为1960),再通过字典映射得到对应的文本标签:

import pandas as pd

# 自定义年代和对应标签的映射关系,可按需增删
decade_label_map = {
    1960: "sixty",
    1970: "seventy",
    1980: "eighty",
    1990: "ninety",
    2000: "twenty_hundred",
    2010: "twenty_ten",
    2020: "twenty_twenty"
}

# 生成decade列,不在映射范围内的年份默认返回NaN,可通过fillna设置默认值
df["decade"] = (df["year"] // 10 * 10).map(decade_label_map).fillna("other")

R 环境

tidyverse(dplyr)写法

用case_when做条件判断,逻辑直观易修改:

library(dplyr)

df <- df %>%
  mutate(decade = case_when(
    year %in% 1960:1969 ~ "sixty",
    year %in% 1970:1979 ~ "seventy",
    year %in% 1980:1989 ~ "eighty",
    year %in% 1990:1999 ~ "ninety",
    year %in% 2000:2009 ~ "twenty_hundred",
    year %in% 2010:2019 ~ "twenty_ten",
    year %in% 2020:2029 ~ "twenty_twenty",
    .default = "other"
  ))

基础R写法

不需要加载第三方包,适合轻量处理场景:

# 计算年份对应的年代起始值
df$decade_start <- floor(df$year / 10) * 10
# 映射得到标签,默认生成factor类型,可用as.character转成字符型
df$decade <- factor(
  df$decade_start,
  levels = c(1960, 1970, 1980, 1990, 2000, 2010, 2020),
  labels = c("sixty", "seventy", "eighty", "ninety", "twenty_hundred", "twenty_ten", "twenty_twenty")
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 05:45:06