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

如何为数据集新增列获取对应公司下一年的客户数量

实现方法

这个需求的核心逻辑是按公司维度分组,匹配每条记录对应下一年的客户数,根据你使用的工具不同,有以下几种常见实现方式:

1. Python Pandas 实现(表格数据处理最常用)

操作前先确保数据已经按公司、年份升序排列,避免顺序错乱导致匹配错误,核心是用分组偏移函数直接生成新列:

import pandas as pd

# 初始化/读取你的数据集
df = pd.DataFrame({
    "Company name": ["Company A", "Company B", "Company C"]*3,
    "Year": [2018,2018,2018,2019,2019,2019,2020,2020,2020],
    "Customers": [100,120,150,120,180,80,200,500,140]
})

# 先按公司、年份排序,保证组内年份顺序正确
df = df.sort_values(by=["Company name", "Year"], ignore_index=True)

# 分组向上偏移1位,得到下一年客户数
df["Customers next year"] = df.groupby("Company name")["Customers"].shift(-1)

执行后得到的结果和你给出的预期完全一致,没有下一年数据的2020年记录会自动填充为NaN(和示例中的NA等价)。

坑点提醒:如果你的数据集存在年份断层(比如某公司只有2018、2020年数据,缺2019年),直接用偏移方法会错误把2020年的客户数匹配给2018年,这种场景请用下面的关联匹配方法。


2. 关联匹配法(适配年份不连续场景)

通过构造辅助匹配列,严格按照「同公司、年份差为1」的规则做关联,不会出现年份断层的匹配错误:

# 构造用于匹配的辅助数据集
match_part = df[["Company name", "Year", "Customers"]].rename(
    columns={"Customers": "Customers next year"}
)
match_part["Year"] = match_part["Year"] - 1

# 左关联匹配得到结果
df = df.merge(
    match_part[["Company name", "Year", "Customers next year"]],
    on=["Company name", "Year"],
    how="left"
)

3. SQL 实现(数据库场景)

如果数据存储在支持窗口函数的数据库中,可以直接用LEAD窗口函数实现,逻辑和Pandas偏移一致:

SELECT
    `Company name`,
    `Year`,
    `Customers`,
    LEAD(`Customers`, 1) OVER (
        PARTITION BY `Company name` 
        ORDER BY `Year` ASC
    ) AS `Customers next year`
FROM your_table;

如果需要适配年份断层场景,可以改用左关联写法:

SELECT
    t1.`Company name`,
    t1.`Year`,
    t1.`Customers`,
    t2.`Customers` AS `Customers next year`
FROM your_table t1
LEFT JOIN your_table t2
ON t1.`Company name` = t2.`Company name`
AND t2.`Year` = t1.`Year` + 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:06:25