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')
我需要阅读两个电子表格(比方说 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')