我有两个表,采购订单数据和商品代码数据。一些天才决定,一些材料组码应该是相同的,因为它们在较低级别上由总账账户区分。因此,我不能在材质组上合并,因为我会得到重复的行。
假设如下:
import pandas as pd
d1 = {'PO':[123456,654321,971358], 'matgrp': ["1001",'803A',"803B"]}
d2 = {'matgrp':["1001", "1001", "803A", "803B"], 'commodity':['foo - 10001', 'bar - 10002', 'spam - 100003','eggs - 10003']}
pos = pd.DataFrame(data=d1)
mat_grp = pd.DataFrame(data=d2)
merged = pd.merge(pos, mat_grp, how='left', on='matgrp')
merged.head()
PO matgrp commodity
0 123456 1001 foo - 10001
1 123456 1001 bar - 10002
2 654321 803A spam - 100003
3 971358 803B eggs - 10003
如您所见,PO 123456显示了两次,因为物料组表中有多行物料1001。
所需的行为是“合并”只合并一次,找到材质组的第一个条目,然后添加它,而不执行其他操作,比如vlookup的工作方式。长商品代码在某些情况下可能不正确(总是显示第一个),这是可以接受的不准确。
注:虽然欢迎在本问题范围之外提出如何解决该问题的建议(例如合并总账账户,由于其他原因不可行),但假设以下情况:可用数据是SAP ME81N的采购订单列表和包含物料组/商品代码列表的Excel文件。