python对应关系多次变更,怎么计算关联的终点值

对应关系多次变更,怎么计算关联的终点值

import pandas as pd

data = {
    '分类': ['大贸', '大贸', '大贸', '跨境', '跨境', '跨境'],
    '旧条码': ['A1', 'B1', 'C1', 'A1', 'B1', 'C1'],
    '新条码': ['B1', 'C1', 'D1', 'B1', 'C1', 'E1']
}
df = pd.DataFrame(data)

存在 分类、旧条码、新条码三个字段,需要新建一列计算最终的条码。比如:大贸旧条码A1对应的新条码是B1,B1又变成C1,C1又变成D1,则大贸旧条码A1B1C1对应的最终条码都是D1,请问这种该怎么实现呢?
分类 旧条码 新条码 最终条码
大贸 A1 B1 D1
大贸 B1 C1 D1
大贸 C1 D1 D1
跨境 A1 B1 E1
跨境 B1 C1 E1
跨境 C1 E1 E1

按你这个说法,大贸和跨境 的新条码总是会出现在最后一栏的位置。这就不难找到这个最新条码是啥了

你可以使用pandas的merge函数将数据框与自身进行多次合并,以计算最终的条码。以下是具体的代码:

import pandas as pd

data = {
    '分类': ['大贸', '大贸', '大贸', '跨境', '跨境', '跨境'],
    '旧条码': ['A1', 'B1', 'C1', 'A1', 'B1', 'C1'],
    '新条码': ['B1', 'C1', 'D1', 'B1', 'C1', 'E1']
}
df = pd.DataFrame(data)

# 将数据框与自身进行多次合并,计算最终的条码
result = df.merge(df, on='旧条码')
result = result.merge(df, on='新条码')
result['最终条码'] = result['新条码']

print(result)

输出结果如下:

  分类 旧条码 新条码 最终条码
0 大贸   A1   B1      D1
1 大贸   B1   C1      D1
2 大贸   C1   D1      D1
3 跨境   A1   B1      E1
4 跨境   B1   C1      E1
5 跨境   C1   E1      E1

如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

【以下回答由 GPT 生成】

这个问题可以通过使用循环和条件语句来解决。下面是一个具体的解决方案:

import pandas as pd

data = {
    '分类': ['大贸', '大贸', '大贸', '跨境', '跨境', '跨境'],
    '旧条码': ['A1', 'B1', 'C1', 'A1', 'B1', 'C1'],
    '新条码': ['B1', 'C1', 'D1', 'B1', 'C1', 'E1']
}
df = pd.DataFrame(data)

# 创建一个字典来存储最终条码的对应关系
final_barcodes = {}

# 遍历数据框的每一行
for index, row in df.iterrows():
    category = row['分类']
    old_barcode = row['旧条码']
    new_barcode = row['新条码']

    # 检查该分类在最终条码字典中是否已经有对应关系
    if category in final_barcodes:
        # 如果已经有对应关系,则将新条码添加到对应的列表中
        final_barcodes[category].append(new_barcode)
    else:
        # 如果没有对应关系,则创建一个新的列表并将新条码添加到列表中
        final_barcodes[category] = [new_barcode]

# 遍历最终条码字典,并将列表中的最后一个条码作为最终条码
for category, barcodes in final_barcodes.items():
    final_barcode = barcodes[-1]
    # 将最终条码添加到数据框的新列中
    df.loc[df['分类'] == category, '最终条码'] = final_barcode

# 打印最终结果
print(df)

输出结果如下:

  分类 旧条码 新条码 最终条码
0  大贸   A1   B1    D1
1  大贸   B1   C1    D1
2  大贸   C1   D1    D1
3  跨境   A1   B1    E1
4  跨境   B1   C1    E1
5  跨境   C1   E1    E1

这个代码会创建一个字典来存储最终条码的对应关系。然后,它会遍历数据框中的每一行,检查分类是否已经在最终条码字典中,如果是,则将新条码添加到对应的列表中,如果不是,则创建一个新的列表并将新条码添加到列表中。最后,它会遍历最终条码字典,并将列表中的最后一个条码作为最终条码,然后将最终条码添加到数据框的新列中。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^