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

如何在Pandas中判断零件号是否专属客户并生成新列

解决方案

步骤1:提取客户信息

首先从Col1中拆分出单独的客户列,方便后续统计:

import pandas as pd

# 加载你的数据(这里用示例数据演示)
data = {
    'Col1': ['TUR, Cust1', 'GAR, Cust2', 'FOR, Cust3', 'ERB, Cust1', 'PNR, Cust1',
             'DUL, Cust2', 'COC, Cust3', 'ETM, Cust1', 'ROW, Cust3', 'HON, Cust3'],
    'Col2': [1001, 1001, 1001, 1002, 1002, 1003, 1003, 1004, 1005, 1005]
}
df = pd.DataFrame(data)

# 拆分Col1,提取客户字段
df['Customer'] = df['Col1'].str.split(', ', expand=True)[1]

步骤2:统计零件号的专属客户情况

按零件号(Col2)分组,统计每个零件对应的唯一客户集合,再判断该集合是否仅包含目标客户(比如Cust1):

target_customer = 'Cust1'

# 分组获取每个零件号的唯一客户列表
part_customer_stats = df.groupby('Col2')['Customer'].unique().reset_index()
# 标记是否仅属于目标客户
part_customer_stats['Col3'] = part_customer_stats['Customer'].apply(
    lambda x: len(x) == 1 and x[0] == target_customer
)

步骤3:合并结果到原DataFrame

把统计好的标记列合并回原表,得到最终结果:

# 合并数据,保留原表所有行
df_final = df.merge(part_customer_stats[['Col2', 'Col3']], on='Col2', how='left')
# 可选:删除临时生成的Customer列
df_final = df_final.drop('Customer', axis=1)

# 查看结果
print(df_final)

为什么这样处理?

  • 直接用duplicated只能判断行重复,无法统计每个零件对应的所有客户范围,所以会出错。
  • 分组统计唯一客户的方式,能准确判断零件是否仅被目标客户采购,而且pandas的groupby处理7万行数据效率很高,不会有性能问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:26:05