【问题标题】:vlookup equivalent to join 2 tables using pandas [duplicate]vlookup 相当于使用 pandas 加入 2 个表 [重复]
【发布时间】:2015-09-03 12:20:30
【问题描述】:

场景:

  • df1 具有所有可能的拍卖 ID 值
  • df2 具有可能的拍卖 ID 值的子集
  • df2 包含拍卖中存在的对象 ID(可以是 0 或正整数)

目标:

创建一个新的 df1 列“object_id”,填充 df2 中的相应值

示例...

df1 = pd.DataFrame(columns=['auction_id'], data=[1,2,3,4,5,6,7,8,9])

auction_id
1  
2  
3  
4  
5  
6  
7  
8  
9  


df2 = pd.DataFrame({'auction_id':[1,2,4,6,7,8,9], 'object_id': [640,0,332,332,0,58,332]})

auction_id  object_id  
1             640  
2             0  
4             332  
6             332  
7             0  
8             58  
9             332  

到目前为止我的最大努力

使用vlookup in Pandas using join):

df1['object_id'] = df1.auction_id.map(df2.object_id)

产量:

df1  
auction_id  object_id
1             0  
2             332  
3             332  
4             0  
5             58  
6             332  
7             NaN  
8             NaN  
9             NaN  

【问题讨论】:

  • @EdChum - 我引用了您建议的重复帖子,并尝试应用它推荐的 .map() 函数。我这样做的结果列在上面的“我迄今为止的最大努力”下。我意识到我一定错过了什么;你能帮我理解如何在这个例子中使用 .map() 函数吗?
  • 你可以这样做df1['object_id'] = df1.auction_id.map(df2.set_index('auction_id').object_id)如果你传递一个系列那么索引必须是你试图执行查找的集合

标签: python join pandas dataframe vlookup


【解决方案1】:

您可以使用 pandas 库中的合并功能,如下所示:

import pandas as pd

df1 = pd.DataFrame(columns=['auction_id'], data=[1,2,3,4,5,6,7,8,9])    
df2 = pd.DataFrame({'auction_id':[1,2,4,6,7,8,9], 'object_id': [640,0,332,332,0,58,332]})    

new_df = pd.merge(df1,df2,how='left',on='auction_id')

您可以在此处阅读有关合并功能的信息:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    相关资源
    最近更新 更多