Python Pandas-Vlookup-搜索列中存在重复值

Python Pandas-Vlookup-搜索列中存在重复值,python,excel,pandas,vlookup,Python,Excel,Pandas,Vlookup,我试图在Pandas中模拟v查找(excel函数)(使用测试数据集,合并函数似乎可以工作)-但我确实对这里的示例有疑问。如果您看第一个示例,它合并了两个df,那么输出有更多的列和行。我只想返回一个新列,就像v查找的工作原理一样。尽管如此,当我尝试我的代码时,即使是在上面,我也会得到以下错误: agingdf = agingdf.merge(plannerdf, left_on ='Cust_PO_Number', right_on='Cust_PO_Number') ValueError: T

我试图在Pandas中模拟v查找(excel函数)(使用测试数据集,合并函数似乎可以工作)-但我确实对这里的示例有疑问。如果您看第一个示例,它合并了两个df,那么输出有更多的列和行。我只想返回一个新列,就像v查找的工作原理一样。尽管如此,当我尝试我的代码时,即使是在上面,我也会得到以下错误:

agingdf = agingdf.merge(plannerdf, left_on ='Cust_PO_Number', right_on='Cust_PO_Number')

ValueError: The column label 'Cust_PO_Number' is not unique.
For a multi-index, the label must be a tuple with elements corresponding to each level.
下面是一张与我的问题相似的公开票,但没有解决方案

我很抱歉,如果这是含糊不清的,我不能上传的df和excel文件,因为它是工作和测试df的我尝试没有抛出相同的错误

在一天结束时,我只想对pandas做一个vlookup,vlookup值可能是重复的,因此在这种情况下,只要首先命中重复值,就会在新列中返回该值

下面是一个示例df,它可以帮助您想象我所说的Cust_PO_编号中的重复项是什么意思

a = {'Cust_PO_Number': ['A', 'B', 'C', 'C'], 'ColumnB': [1,2,3,4]}
b = {'Cust_PO_Number': ['A', 'B', 'C', 'C'], 'Column_That_I_Want_added': [2,3,4,5]}
df = pd.DataFrame(data=a)
df2 = pd.DataFrame(data=b)

desired df
c = {'ColumnA': ['A', 'B', 'C', 'C'], 'ColumnB': [1,2,3,4], 'MatchedColumn', [2,3,4,5]}

desireddf = pd.DataFrame(data=c)
现在来探索多层次的专栏

print(plannerdf.columns)
MultiIndex(levels=[['Cust_PO_Number', 'Department']],
           labels=[[0, 1]])
试试这个:

df.insert(2,'Column_That_I_Want_added', df['Cust_PO_Number'].map(df2.drop_duplicates('Cust_PO_Number').set_index('Cust_PO_Number')['Column_That_I_Want_added']))
其中,
df
是原始数据帧和所需的数据帧,
df2
是查找数据的地方。

尝试以下操作:

df.insert(2,'Column_That_I_Want_added', df['Cust_PO_Number'].map(df2.drop_duplicates('Cust_PO_Number').set_index('Cust_PO_Number')['Column_That_I_Want_added']))

其中,
df
是原始数据帧以及所需的数据帧,
df2
是您查找数据的地方。

我们查看的数据集大小是多少?因此,为了澄清:
plannerdf
可能包含多行,用于
客户订单号的每个唯一值,你只需要取与第一列相对应的剩余列?25k行,文件上的25列,其中我使用的值是vlookup,然后我从中提取匹配的文件是11k行,20列左右。想象一下在excel中进行v查找,我传入的第一个参数是“Cust_PO_Number”,此列是否存在于两个电子表格中。“客户编号”-列本身有一些重复项。这将是我唯一的猜测是什么导致了这个错误。这有意义吗?@gmds看到了我在帖子中所做的编辑。看看客户订单号怎么有重复的C,这就是我的意思。我正试图加入一个新的专栏,即匹配的专栏,与我得到的匹配。如果同一个客户订单号有不同的值,这很好,这可以在excel中发生,它只需要首先匹配任何值。我们要查看的数据集大小是多少?因此,为了澄清:
plannerdf
可能会为
Cust订单号
的每个唯一值包含多行,你只需要取与第一列相对应的剩余列?25k行,文件上的25列,其中我使用的值是vlookup,然后我从中提取匹配的文件是11k行,20列左右。想象一下在excel中进行v查找,我传入的第一个参数是“Cust_PO_Number”,此列是否存在于两个电子表格中。“客户编号”-列本身有一些重复项。这将是我唯一的猜测是什么导致了这个错误。这有意义吗?@gmds看到了我在帖子中所做的编辑。看看客户订单号怎么有重复的C,这就是我的意思。我正试图加入一个新的专栏,即匹配的专栏,与我得到的匹配。如果出现同一个Cust_PO_Num的值不同的情况,这很好,这可以在excel中发生,它只需要首先获取匹配的内容。