Python 如何在数据帧中有条件地执行vlookup

Python 如何在数据帧中有条件地执行vlookup,python,pandas,Python,Pandas,我正试图找出如何做一个vlookup挑选出最新的价格,以填补第二个表。下面是一个例子。对于第1项,最新价格为第6个月($6),而第2项为第5个月($4)。填表B最好的方法是什么?注意:如果项目是新的,则可能会在表A中找不到项目id 有什么指导吗?非常感谢 表A(参考) 表B(待填写) 要填充df2中的Price列,我们可以创建一个带有商品ID和价格的熊猫系列。用于每个项目ID的最后一行,并通过选择列创建系列。最后,使用创建新列 完整示例: import pandas as pd # Sampl

我正试图找出如何做一个vlookup挑选出最新的价格,以填补第二个表。下面是一个例子。对于第1项,最新价格为第6个月($6),而第2项为第5个月($4)。填表B最好的方法是什么?注意:如果项目是新的,则可能会在表A中找不到
项目id

有什么指导吗?非常感谢

表A(参考)

表B(待填写)


要填充
df2
中的
Price
列,我们可以创建一个带有商品ID和价格的熊猫系列。用于每个
项目ID的最后一行
,并通过选择列创建
系列
。最后,使用创建新列

完整示例:

import pandas as pd

# Sample data
data1 = dict(Item_ID=[1,1,1,2], Month=[4,5,6,5], Price = [10,8,6,4])
data2 = dict(Shop_ID=[1,1],Item_ID=[1,2])

# Create dfs
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

# Crete a series with Item_ID as index and Price as value
s = df1.drop_duplicates('Item_ID', keep='last').set_index('Item_ID')['Price']

# Create new column in df2
df2['Price'] = df2['Item_ID'].map(s)
print (df2)
返回:

   Shop_ID  Item_ID  Price 
0        1        1      6 
1        1        2      4 

更多详细信息

如有必要,请先使用

系列
s
如下所示:

Item_ID
1    6
2    4
Name: Price, dtype: int64

您可以先查找最新信息,然后将其合并以创建表:

import pandas


tableA = pandas.DataFrame({'Item_ID': {0: 1, 1: 1, 2: 1, 3: 2},
                           'Month': {0: 4, 1: 5, 2: 6, 3: 5},
                           'Price': {0: 10, 1: 8, 2: 6, 3: 4}})
tableB = pandas.DataFrame({'Item_ID': {0: 1, 1: 2}, 
                           'Price': {0: 6, 1: 4}, 
                           'Shop_ID': {0: 1, 1: 1}})

latest = tableA.loc[tableA.groupby('Item_ID')['Month'].idxmax()]
result = tableB[['Shop_ID', 'Item_ID']].merge(latest[['Item_ID', 'Price']],
                                              on='Item_ID')
这就产生了

       Shop_ID  Item_ID  Price
0        1        1      6
1        1        2      4

这个答案很好,我冒昧地添加了一些数据并到处乱扔东西+1@AntonvBR-非常感谢。
Item_ID
1    6
2    4
Name: Price, dtype: int64
import pandas


tableA = pandas.DataFrame({'Item_ID': {0: 1, 1: 1, 2: 1, 3: 2},
                           'Month': {0: 4, 1: 5, 2: 6, 3: 5},
                           'Price': {0: 10, 1: 8, 2: 6, 3: 4}})
tableB = pandas.DataFrame({'Item_ID': {0: 1, 1: 2}, 
                           'Price': {0: 6, 1: 4}, 
                           'Shop_ID': {0: 1, 1: 1}})

latest = tableA.loc[tableA.groupby('Item_ID')['Month'].idxmax()]
result = tableB[['Shop_ID', 'Item_ID']].merge(latest[['Item_ID', 'Price']],
                                              on='Item_ID')
       Shop_ID  Item_ID  Price
0        1        1      6
1        1        2      4