python - Pandas - Vlookup - 搜索列中的重复值

标签 python excel pandas vlookup

我试图在 Pandas 中模仿 v 查找(excel 函数)(使用测试数据集,合并函数似乎可以工作) - 但我对此处的示例确实有疑问 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html 。如果您看第一个示例,它合并了两个 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.

下面是一个开放的票证,看起来与我的问题相似,但没有解决方案。

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

最佳答案

试试这个:

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

关于python - Pandas - Vlookup - 搜索列中的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55582808/

相关文章:

python - Networkx 随机几何图限制节点在半径 r 内

python - Django 更改根 URL

python - Groupby/ reshape pandas 中的数据

python - 如何在没有警告的情况下在 python pandas 中为数据框设置特定值?

python - 按文件数拆分 gzip 文件

python - Ubuntu:pip 不适用于 python3.4

c# - 使用 VS2010 和 Excel 2010 访问 FormatCondition 的异常

excel - 在用户窗体中使用点模式

arrays - 使用变体数组加速每个循环。 Excel VBA

pandas - 将 Pandas 数据框转换为 geoTIFF (python)