对应关系多次变更,怎么计算关联的终点值
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
这个代码会创建一个字典来存储最终条码的对应关系。然后,它会遍历数据框中的每一行,检查分类是否已经在最终条码字典中,如果是,则将新条码添加到对应的列表中,如果不是,则创建一个新的列表并将新条码添加到列表中。最后,它会遍历最终条码字典,并将列表中的最后一个条码作为最终条码,然后将最终条码添加到数据框的新列中。
【相关推荐】