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

合并DataFrame并按Segment生成对应Territory列的技术咨询

解决方案

你可以通过重命名列 + 外连接合并 + 缺失值填充的方式实现需求,具体步骤如下:

步骤1:预处理两个DataFrame

分别从df_1和df_2中保留ZIP和TERRITORY列,并根据各自的SEGMENT值重命名TERRITORY列,让合并后的列名直接匹配需求:

# 处理df_1:保留目标列并重命名TERRITORY
df1_processed = df_1[['ZIP', 'TERRITORY']].rename(columns={'TERRITORY': 'CR1_TERRITORY'})

# 处理df_2:保留目标列并重命名TERRITORY
df2_processed = df_2[['ZIP', 'TERRITORY']].rename(columns={'TERRITORY': 'CR2_TERRITORY'})

步骤2:外连接合并数据

使用merge方法,以ZIP为连接键,采用**外连接(how='outer')**确保所有ZIP记录都被保留:

df_final = df1_processed.merge(df2_processed, on='ZIP', how='outer')

步骤3:填充缺失值为0

合并后无对应TERRITORY的位置会显示NaN,用fillna将其替换为0:

df_final = df_final.fillna(0)

完整可运行示例

如果需要构造测试数据验证,完整代码如下:

import pandas as pd

# 构造示例df_1
df_1 = pd.DataFrame({
    'ZIP': [93517, 31625, 89311],
    'TERRITORY': [1001, 1002, 1002],
    'SEGMENT': ['CR1', 'CR1', 'CR1']
})

# 构造示例df_2
df_2 = pd.DataFrame({
    'ZIP': [93517, 31625, 72844],
    'TERRITORY': [2001, 2002, 2003],
    'SEGMENT': ['CR2', 'CR2', 'CR2']
})

# 预处理数据
df1_processed = df_1[['ZIP', 'TERRITORY']].rename(columns={'TERRITORY': 'CR1_TERRITORY'})
df2_processed = df_2[['ZIP', 'TERRITORY']].rename(columns={'TERRITORY': 'CR2_TERRITORY'})

# 合并并填充缺失值
df_final = df1_processed.merge(df2_processed, on='ZIP', how='outer').fillna(0)

# 可选:将浮点型转为整数
df_final = df_final.astype(int)

# 输出结果
print(df_final)

运行后输出的df_final完全匹配你需要的格式:

ZIP  CR1_TERRITORY  CR2_TERRITORY
0  93517           1001           2001
1  31625           1002           2002
2  89311           1002              0
3  72844              0           2003

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:57:32