python - 将一个 Excel 文件中的值与 pandas 中的另一个 Excel 文件匹配并获取值
问题描述
我有两个 excel 文件,我将它们命名为:source.xlsx、output.xlsx。
我需要使用source.xlsx的Caller ID列将数据匹配到output.xlsx的svc_no列
如果使用Caller ID列没有匹配或值为“NULL” ,我可以使用source.xlsx的adsl列与output.xlsx的端口列匹配。
如果匹配,那么我应该忽略端口并写入Caller ID
source.xlsx中的数据如下所示:
Caller ID adsl Comparison Result
NULL 2/12 Not Match
11111111 2/267 Match
22222222 4/243 Match
22222222 2/117 Possible Match
output.xlsx中的数据如下所示:
svc_no Caller ID port Comparison Result
22222222 4/243
11111111 2/267
22222222 2/117
NULL 2/12
我的预期输出是将数据从source.xlsx写入output.xlsx:
svc_no Caller ID port Comparison Result
22222222 22222222 4/243 Match
11111111 11111111 2/267 Match
22222222 22222222 2/117 Possible Match
NULL NULL 2/12 Not Match
我尝试使用:
df = read_excel('source.xlsx')
df1 = read_excel('output.xlsx')
df = df['Caller ID'].isin(df1['svc_no'])]
df['Caller ID'] = df1['Caller ID']
df1.to_excel('output.xlsx')
但它不匹配和随机写入。
解决方案
这是一种方式。
# filter output for 2 pre-populated columns
output = output[['svc_no', 'port']]
# add duplicate column
output['Caller ID'] = output['svc_no']
# create series mapping from source
s = source.set_index(['Caller ID', 'adsl'])['Comparison Result']
# map series to output
output['Comparison Result'] = output.set_index(['svc_no','port']).index.map(s.get)
print(output)
svc_no port Caller ID Comparison Result
0 2.22222e+07 4/243 2.22222e+07 Match
1 1.11111e+07 2/267 1.11111e+07 Match
2 2.22222e+07 2/117 2.22222e+07 PossibleMatch
3 NULL 2/12 NULL NotMatch
推荐阅读
- python - 为什么我的代码在使用键盘时循环两次?
- javascript - 如何使用javascript从python中转义字符串
- python - Python how to generate all pair-terms
- go - 如何使用 Go 在 Windows 上创建和存储带有私钥的自签名证书
- vba - Error 5 vba, invalid call when looping through a recordset
- flutter - 如何在 showTimePicker 中不显示选择器几分钟?
- python - python中的循环不适用于文本文件中的所有行
- php - How to set up twilio taskrouter outbound call?
- javascript - How can one use TensorFlow.js tf.data.generator for remote data sources since generators can't use callbacks
- python - 如何从烧瓶端点返回纯文本?普罗米修斯需要