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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:01:31