如何在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
相关产品推荐
相关产品推荐

