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

Python中如何将聚合生成的分段列匹配合并至原DataFrame

问题描述

我有一张包含公司名称及各订单金额的表格:

Order IdCompany IdCompany NameDateOrder Value
345580EYLOKP9E762WKGChimera-Chasing18-02-20172345
4875TLEXR1HZWTUTBHPBMellow Ezra30-07-20153245
8425839FKFW2LLX4LMBBChimera-Chasing27-05-20164566
483797OX39BGVMHODLJMWorst Mali27-09-20185674
34345T4LGH4XGBWOD49ZIndonesian Grigory14-01-20167654

我需要添加一个新列,根据公司的订单总金额将其划分为Prime、Platinum、Gold、Silver四个分段,已完成以下步骤:

  1. 按公司名称聚合订单总金额:
seg = orders.loc[:,['Company Name', 'Order Value']].groupby('Company Name').sum()

聚合结果示例:

Company NameOrder Value
'48 Wills65325
10-Day Causes85473
10-Hour Leak83021
Youngish Mark'S120343
10-Year-Old Alba97968
......
  1. 通过条件判断添加分段列:
conditions = [
    (seg['Order Value'] >= 124485),
    (seg['Order Value'] >= 105503) & (seg['Order Value'] < 124485),
    (seg['Order Value'] >= 88174) & (seg['Order Value'] < 105503),
    (seg['Order Value'] < 88174)
]

values = ['Prime', 'Platinum', 'Gold', 'Silver']

seg['Segment'] = np.select(conditions, values)

现在需要将Segment列按公司名称匹配,添加到原DataFrame(orders)中,求实现方法。

解决方案

有两种简单高效的方法可以实现这个需求:

方法1:使用merge合并DataFrame

merge是Pandas中关联数据的常用方法,通过Company Name作为关联键,将seg中的Segment列合并到原orders表中:

# 重置seg的索引,将Company Name从索引转为普通列
seg_reset = seg.reset_index()
# 合并到原orders表,仅保留需要的Segment列
orders_with_segment = orders.merge(seg_reset[['Company Name', 'Segment']], on='Company Name', how='left')
  • how='left'确保原orders的所有行都被保留,避免因数据缺失丢失订单记录。

方法2:使用map映射分段值

由于seg在聚合后Company Name是索引,可直接用map方法通过公司名称映射对应的Segment值:

# 直接用orders的Company Name列匹配seg的Segment值
orders['Segment'] = orders['Company Name'].map(seg['Segment'])

这种方法代码更简洁,适合一对一的映射场景;如果需要合并多列数据,merge方法会更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:48:20