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

如何关联两个DataFrame并生成多国家软件发布排序序列

原始输入DataFrame

SW SourceSW Version国家Verification Code
a567dfgab869df0aChinaXYZ-1010
b869df0aj678900aBrazilXYZ-1011
j678900ayur686fhPortugalXYZ-1012

待解决问题

  1. 如何识别版本关联并完成排序?
  2. 在无部署日期的情况下,结合发布国家维度跟踪软件版本的发布顺序?

已知规则

  • 首个版本的SW Version不会出现在任何条目的SW Source字段中
  • 最后一个版本的SW Source不会出现在任何条目的SW Version字段中(无后续发布版本)
  • 必须保留国家维度,不能丢弃

期望输出结果

SW SourceSW Version国家Verification Code排序编号(Order Nr)
a567dfgab869df0aChinaXYZ-10101
a567dfgab869df0aBrazilXYZ-10111
a567dfgab869df0aPortugalXYZ-10121
b869df0aj678900aChinaXYZ-10102
b869df0aj678900aBrazilXYZ-10112
b869df0aj678900aPortugalXYZ-10122
j678900ayur686fhChinaXYZ-10103
j678900ayur686fhBrazilXYZ-10113
j678900ayur686fhPortugalXYZ-10123

解决方案

核心思路

  1. 构建版本依赖链:通过SW Source与SW Version的关联关系,识别版本的先后层级,分配排序编号
  2. 扩展国家维度:提取所有唯一国家列表,将每个版本对与所有国家做笛卡尔积扩展,保留完整维度
  3. 匹配验证码:基于国家维度关联对应的验证码,确保数据准确性

Python Pandas 代码实现

import pandas as pd

# 加载原始数据
raw_data = {
    "SW Source": ["a567dfga", "b869df0a", "j678900a"],
    "SW Version": ["b869df0a", "j678900a", "yur686fh"],
    "国家": ["China", "Brazil", "Portugal"],
    "Verification Code": ["XYZ-1010", "XYZ-1011", "XYZ-1012"]
}
df_raw = pd.DataFrame(raw_data)

# 1. 提取国家与验证码的唯一映射
country_code_mapping = df_raw[["国家", "Verification Code"]].drop_duplicates()

# 2. 构建版本依赖链,生成排序编号
version_links = df_raw[["SW Source", "SW Version"]].drop_duplicates()
# 找到起始版本:SW Version未出现在SW Source中的条目对应的Source
start_sources = version_links[~version_links["SW Version"].isin(version_links["SW Source"])]["SW Source"].tolist()

version_order_list = []
current_level = 1
current_source_list = start_sources

# 迭代遍历版本层级
while current_source_list:
    current_pairs = version_links[version_links["SW Source"].isin(current_source_list)]
    # 为当前层级的版本对分配排序编号
    for _, row in current_pairs.iterrows():
        version_order_list.append({
            "SW Source": row["SW Source"],
            "SW Version": row["SW Version"],
            "排序编号(Order Nr)": current_level
        })
    # 更新下一层级的源版本
    current_source_list = current_pairs["SW Version"].tolist()
    current_level += 1

order_df = pd.DataFrame(version_order_list)

# 3. 笛卡尔积扩展国家维度,并关联验证码
result_df = order_df.merge(country_code_mapping, how="cross")

# 调整列顺序匹配期望输出
result_df = result_df[["SW Source", "SW Version", "国家", "Verification Code", "排序编号(Order Nr)"]]

print(result_df)

代码说明

  • 先提取国家与验证码的唯一映射,避免重复数据
  • 通过迭代方式遍历版本依赖关系,自动识别版本层级并分配排序编号
  • 使用merge(how="cross")实现版本对与国家的全量扩展,确保所有国家维度都被保留
  • 最后调整列顺序,得到符合要求的输出结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:15:29