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

利用groupby与isin查找企业新增出口目的地(Pandas数据处理)

嘿,我来帮你搞定这个问题!要找出各企业2016年相对2015年新增的出口目的地,咱们可以用分组结合集合判断的方式来实现,具体步骤和代码如下:

具体实现方案

步骤1:准备数据并提取2015年各企业的出口目的地集合

首先咱们先加载数据,然后把每个企业(Id)在2015年的所有出口目的地存成集合——用集合的好处是判断元素是否存在的速度更快:

import pandas as pd

# 初始化你的数据
df = pd.DataFrame({
    "Id":[1,1,1,1,1,1,2,2,2,3,3], 
    "Year":[2015,2015,2016,2016,2016,2016,2015,2016,2016,2015,2016], 
    "Destiny":['A','B','A','B','C','D','C','C','D','A','Z']
})

# 提取每个Id对应的2015年出口目的地集合,转成字典方便后续查询
destiny_2015 = df[df['Year'] == 2015].groupby('Id')['Destiny'].apply(set).to_dict()

步骤2:筛选2016年的新增目的地

接下来咱们聚焦2016年的数据,先去除重复的(同一个企业同一个目的地只留一条),再筛选出那些不在该企业2015年目的地列表里的记录:

# 提取2016年数据并去重,避免同一目的地多次出现
df_2016 = df[df['Year'] == 2016].drop_duplicates(subset=['Id', 'Destiny'])

# 判断每行的目的地是否是2016年新增的
is_new = df_2016.apply(lambda row: row['Destiny'] not in destiny_2015.get(row['Id'], set()), axis=1)

# 筛选出新增记录并整理格式
result = df_2016[is_new][['Id', 'Year', 'Destiny']].sort_values('Id').reset_index(drop=True)

# 输出结果
print(result)

运行这段代码后,你会得到如下输出:

Id  Year Destiny
0   1  2016       C
1   1  2016       D
2   2  2016       D
3   3  2016       Z

这里需要说明下:按照原数据,企业1的C和D都是2016年新增的(2015年只有A、B),企业2的D也是新增的(2015年只有C)。如果你的期望输出是只保留某些特定新增项,可能需要额外的过滤条件,但上面的代码是通用的解决方案,能找出所有符合条件的新增目的地。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:59:54