python - 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 |
解决方案
以下应该有效:
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')
推荐阅读
- asp.net - 到多个数据库的 Web API 连接字符串
- node.js - 为什么 PM2 没有启动我的 Node 进程?
- scheme - 平衡三进制字符串的总和
- sql - 需要为表和表的 varchar 列分配一个自动增量值,而不使用 Id 列作为自动增量
- laravel - 基于已翻译资源的 Laravel Nova Override BelongsTo Language 字段
- html - CSS 阴影属性未显示在多边形对象上
- android - FirebaseAuth 不返回当前用户
- ios - 在 Swift iOS 中将文本字段设置为应用程序启动时的第一响应者
- kendo-ui - 使用 memoryCache .Net Core 具有相同数据源的多个 Kendo DropDownList 控件
- maven - Maven Enforcer 插件识别 Camel-CXF 中的依赖收敛问题