合并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
相关产品推荐
相关产品推荐

