首页 > 解决方案 > Pandas - Vlookup - 搜索列中的重复值

问题描述

我正在尝试模仿 Pandas 中的 av 查找(excel 函数)(使用测试数据集,合并函数似乎有效) - 但我对这里的示例有疑问https://pandas.pydata.org/pandas-docs/stable /reference/api/pandas.DataFrame.merge.html。如果你看第一个例子,它合并了两个 df,输出有更多的列和更多的 ROWS。我只想返回一个新列 - 就像 av 查找的工作原理一样。尽管如此,当我尝试我的代码时,即使是上面的,我也会收到这个错误:

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.

下面是一张与我的问题相似但没有解决方案的公开票。

https://github.com/pandas-dev/pandas/issues/20769

如果这含糊不清,我深表歉意,我无法上传 df 和 excel 文件,因为它是为了工作而我尝试的测试 DF 没有抛出相同的错误。

归根结底,我只想用 pandas 进行 vlookup,并且 vlookup 值可能是重复的,所以在这种情况下,只要首先命中任何重复值,这就是将在新列中返回的值。

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

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]])

标签: pythonexcelpandasvlookup

解决方案


尝试这个:

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您从中查找数据的位置。


推荐阅读