python - 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]])
解决方案
尝试这个:
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
您从中查找数据的位置。
推荐阅读
- docker - Docker的镜像和主机不兼容
- json - 如何使用带有 JSON 源的 DataTable 显示数据?
- java - 为什么 Thread.sleep() 在 JavaFX 中不能相应地工作?
- css - 将 px 更改为 rem 后 font-size 没有响应
- sql - 类似于 SQL Server 2014 中的 DATEDIFF_BIG 的自定义代码
- python - 为什么不可能进行解构增强分配?
- php - 我仅将后端用作 API。我怎样才能看到我 dd()-ing 是什么?
- dialogflow-es - Dialogflow Fulfillment:Webhook 调用失败。错误:500 内部服务器错误
- laravel - Laravel 这个响应时间好吗?
- laravel - 在 voyager 中隐藏小部件