首页 > 解决方案 > Python:比较两个excel表之间的列字符串并找到匹配的列并写入另一个数据框

问题描述

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

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

编号 产品 产品描述
1 衬衫 蒙特卡洛男士衬衫
2 衬衫 Belmonte 棉质衬衫
3 衬衫 美国马球 T 恤男士
4 衬衫 蒙特卡洛 T 恤
5 衬衫 蒙特卡洛男士衬衫
6 套装 路易菲利普无皱纹
7 套装 公园大道
8 套装 范豪森
9 手表 Titan 男士手腕型
10 手表 卡西欧
11 手表 Titan 女士手腕型
12 手表 劳力士
13 手表 卡西欧

SS2:

编号 产品 产品描述 购买日期 数量 价格 净值
1 手表 卡西欧 19 年 1 月 10 5000 50000
2 手表 劳力士 5月20日 2 500000 1000000
3 衬衫 蒙特卡洛 T 恤 2月20日 20 2000 40000
4 套装 雷蒙德 1月20日 50 10000 500000
5 手表 路易丝·莫奈 5月21日 3 60000 180000
6 衬衫 彼得英格兰 Apr-21 40 1800 72000
7 手表 卡西欧 3 月 19 日 30 5500 165000
8 衬衫 蒙特卡洛男士衬衫 19 年 6 月 10 3000 30000
9 衬衫 蒙特卡洛男士衬衫 4月-20日 12 3100 37200
10 手表 劳力士 12月20日 4 505000 2020000
11 套装 Louis Philippe 无皱西装 6月21日 9 20000 180000
12 套装 艾伦·索利 1月21日 12 4000 48000
13 衬衫 蒙特卡洛 T 恤 Apr-21 15 2500 37500

输出:

编号 产品 产品描述 购买日期 价格
1 衬衫 蒙特卡洛男士衬衫 4月-20日 3100
2 衬衫 蒙特卡洛 T 恤 Apr-21 2500
3 套装 Louis Philippe 无皱西装 12 年 6 月 20000
4 手表 卡西欧 3 月 19 日 5500
5 手表 劳力士 12月20日 505000

标签: pythonpandasstringtextcomparison

解决方案


以下应该有效:

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

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

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

推荐阅读