基于ProdCategory拼接ProdID:Python生成指定列需求问询
解决方案:用Python实现ProdID按规则拼接
当然可行!用Python的pandas库就能轻松搞定这个需求,我结合你提供的数据示例,整理了具体的实现步骤和代码:
需求回顾
根据你的数据示例,我们需要生成两列:
- MainProdConcat:按
OrderNo和MainItem分组,拼接该组内所有的ProdID(不区分ProdCategory) - MainProdConcat_PConly:按
OrderNo和MainItem分组,仅拼接该组内ProdCategory为PC的ProdID
代码实现
import pandas as pd # 1. 构造你的示例数据(实际使用时可替换为读取你的数据源,比如csv/excel) data = { "OrderNo": [123334]*6, "ProdID": [1, 2, 3, 4, 5, 6], "ProdCategory": ["PC", "PC", "PC", "PC", "Accessories", "Accessories"], "ItemNo": [100, 110, 120, 130, 140, 150], "ProdType": ["Main", "Option", "Option", "Option", "Option", "Option"], "MainItem": [100]*6 } df = pd.DataFrame(data) # 2. 生成MainProdConcat列:分组后拼接所有ProdID df["MainProdConcat"] = df.groupby(["OrderNo", "MainItem"])["ProdID"].transform( lambda x: ",".join(map(str, x)) ) # 3. 生成MainProdConcat_PConly列:仅拼接ProdCategory为PC的ProdID # 先过滤出PC类别的行,分组拼接后合并回原数据 pc_concat = df[df["ProdCategory"] == "PC"].groupby(["OrderNo", "MainItem"])["ProdID"].apply( lambda x: ",".join(map(str, x)) ).reset_index(name="MainProdConcat_PConly") df = df.merge(pc_concat, on=["OrderNo", "MainItem"], how="left") # 查看最终结果 print(df)
代码说明
- 分组逻辑:使用
OrderNo和MainItem作为分组键,确保同一订单下同一主商品的相关ProdID被归为一组 - transform方法:直接将分组拼接后的结果映射到原DataFrame的每一行,无需额外合并操作,高效简洁
- PCOnly列处理:先筛选出
ProdCategory为PC的行再进行分组拼接,最后通过merge将结果合并回原表,保证所有行都能获取到对应的值
运行上述代码后,你就能得到和示例中一致的MainProdConcat和MainProdConcat_PConly列啦!
内容的提问来源于stack exchange,提问作者radheradhe
相关产品推荐
相关产品推荐

