Python:比较两个excel工作表之间的列的字符串并找到匹配的列并写入另一个数据框

Python: compare strings of a column between two excel sheets and find the matching columns and write to another data frame

我需要阅读两个电子表格(比方说 SS1 和 SS2)。然后必须阅读 SS1 中的描述列并在 SS2 中搜索最新日期的类似描述。必须将输出写入另一个电子表格,其中包含唯一匹配的描述及其最新日期和价格。

以下输入和输出示例供参考: SS1:

S.No 产品 Product_Description
1 衬衫 Monte Carlo 男士衬衫
2 衬衫 Belmonte 棉质衬衫
3 衬衫 美国 Polo 衫男款
4 衬衫 Monte Carlo T 恤
5 衬衫 Monte Carlo 男士衬衫
6 套装 路易·菲利普无皱纹
7 套装 公园大道
8 套装 范赫森
9 手表 泰坦男腕型
10 手表 卡西欧
11 手表 Titan 女士手腕型
12 手表 劳力士
13 手表 卡西欧

SS2:

S.No 产品 Product_Description Purchase_Date 数量 价格 净值
1 手表 卡西欧 19 年 1 月 10 5000 50000
2 手表 劳力士 5 月 20 日 2 500000 1000000
3 衬衫 Monte Carlo T 恤 2 月 20 日 20 2000 40000
4 套装 雷蒙德 1 月 20 日 50 10000 500000
5 手表 路易斯·莫瓦内 5 月 21 日 3 60000 180000
6 衬衫 彼得英格兰 4 月 21 日 40 1800 72000
7 手表 卡西欧 3 月 19 日 30 5500 165000
8 衬衫 Monte Carlo 男士衬衫 6 月 19 日 10 3000 30000
9 衬衫 Monte Carlo 男士衬衫 4 月 20 日 12 3100 37200
10 手表 劳力士 12 月 20 日 4 505000 2020000
11 套装 路易菲利普防皱西装 6 月 21 日 9 20000 180000
12 套装 艾伦索利 1 月 21 日 12 4000 48000
13 衬衫 Monte Carlo T 恤 4 月 21 日 15 2500 37500

输出:

S.No 产品 Product_Description Purchase_Date 价格
1 衬衫 Monte Carlo 男士衬衫 4 月 20 日 3100
2 衬衫 Monte Carlo T 恤 4 月 21 日 2500
3 套装 路易菲利普防皱西装 6 月 12 日 20000
4 手表 卡西欧 3 月 19 日 5500
5 手表 劳力士 12 月 20 日 505000

以下应该有效:

temp = SS1.merge(SS2, on=['Product', 'Product_Description'])[['S.No_x', 'Product', 'Product_Description', 'Purchase_Date', 'Price']]
    
res = temp.sort_values(['Product_Description','Purchase_Date']).drop_duplicates('Product_Description', keep='last')    
res=res.rename(columns={'S.No_x':'S.No'})
res=res.sort_values('S.No')
res.reset_index(drop=True, inplace=True)
        
print(res)

输出:

   S.No  Product    Product_Description Purchase_Date   Price
0     4    Shirt     Monte Carlo tshirt        Feb-20    2000
1     5    Shirt  Monte Carlo Men Shirt        Jun-19    3000
2    12  Watches                  Rolex        May-20  500000
3    13  Watches                  Casio        Mar-19    5500

如果您想要实际的最新日期(不是数据集中的最新日期),请在上面的代码中插入以下行作为第 2 行:

temp['Purchase_Date'] = pd.to_datetime(temp['Purchase_Date'], format='%b-%d')