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

如何用Pandas高效实现按卖家ID分组并自定义聚合主销售渠道

高效实现方案:基于Pandas矢量化操作

针对百万级数据的性能问题,绝对要避免手动迭代行——Pandas的内置矢量化操作是为这类场景设计的,底层用C优化,速度能提升几个数量级。下面是完整的高效实现方案:

import pandas as pd
import numpy as np

# 示例数据
df = pd.DataFrame([['A', 'a', 'web'], ['A', 'b', 'mobile'], ['B', 'c', 'web'], ['C', 'd', 'web'], ['D', 'e', 'mobile'], ['D', 'f', 'web'], ['D', 'g', 'web'], ['D', 'g', 'web']], columns=['seller_id', 'item_id', 'selling_channel'])

# 步骤1:统计每个卖家各渠道的销量,同时计算每个卖家的总销量
channel_stats = df.groupby(['seller_id', 'selling_channel']).size().reset_index(name='channel_count')
# 用transform获取每个卖家的总销量,避免额外的merge操作
channel_stats['total_count'] = channel_stats.groupby('seller_id')['channel_count'].transform('sum')
# 计算渠道销量占比
channel_stats['ratio'] = channel_stats['channel_count'] / channel_stats['total_count']

# 步骤2:筛选出符合主渠道条件(占比≥75%)的记录
qualified_channels = channel_stats[channel_stats['ratio'] >= 0.75][['seller_id', 'selling_channel']]

# 步骤3:处理没有符合条件渠道的卖家,标记为mixed
all_sellers = df['seller_id'].unique()
# 找出未出现在qualified_channels中的卖家
mixed_sellers = pd.DataFrame({
    'seller_id': all_sellers[~np.isin(all_sellers, qualified_channels['seller_id'])],
    'main_selling_channel': 'mixed'
})

# 步骤4:合并结果并整理格式
final_result = pd.concat([
    qualified_channels.rename(columns={'selling_channel': 'main_selling_channel'}),
    mixed_sellers
]).sort_values('seller_id').reset_index(drop=True)

print(final_result)

输出结果:

seller_id main_selling_channel
0         A                 mixed
1         B                   web
2         C                   web
3         D                   web

为什么这个方案高效?

  • 完全矢量化操作:所有统计、计算都是Pandas内置的groupby/transform操作,避免了Python层面的循环,底层利用C语言优化,处理百万级数据毫无压力。
  • 避免冗余操作:用transform直接获取每个卖家的总销量,不需要额外的merge步骤,减少内存开销和计算时间。
  • 逻辑清晰:拆分步骤后容易维护,也方便根据实际需求调整阈值(比如把75%改成其他比例)。

如果你的数据量特别大(比如千万级),还可以考虑用dask.dataframe做并行处理,但上面的方案对于百万级数据已经足够高效了。

内容的提问来源于stack exchange,提问作者Michał Przybylak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:52:53