如何解决我可以修改一个数据表以匹配另一个几乎相似的数据框的 ID 吗?
- 000-000-000-000
- 对比
- 000-000-000
(总额)
我看过这里、reddit、YouTube,甚至深入到兔子洞里尝试 .join、.append,其他一些我以前从未见过,甚至还没有理解的方法。有没有办法(或者甚至更好的一些我可以阅读的文档来了解这一点)从主 Excel 工作表中提取产品 ID,将其与应该匹配的产品 ID 进行比较。然后我会更喜欢在所有工作表上制作就地 ID。这样我就可以使用这些 ID 作为索引并将 ID 与行数据并排比较?每个 ID 大约有 113 个要比较的值。那是 113 列,但对于每一行来说,如果有意义
补充说明: 突出显示的黄色 ID 是“唯一的”,我不会更改它们,而是将它们写入列表或其他内容,并在找到时使用 if 语句忽略它们。
编辑: 所以我写了这段代码,这几乎是我需要做的。 它去掉了我应用于所有 ID 的“-”。只需要列出一个唯一的 ID 列表,就可以跳过去掉零了
dfSS["Product ID"] = dfSS["Product ID"].str.replace("-","")
那么这只会列出最多 9 位的数字,唯一的 ID 除外
dfSS["Product ID"] = dfSS["Product ID"]str[:9]
我现在正在想办法说类似的话
lst =[1,2,3,4,5]
if dfSS["Product ID"] not in lst:
dfSS["Product ID"] = dfSS["Product ID"].str.replace("-","").str[:9]
这段代码不起作用,但每天我都越来越接近能够比较这些相似但不同的数据帧。 lst 只是我根本不想过滤的列表中的 000-000-000 产品 ID 的示例。但保留在数据框中
解决方法
如果 ID 转换是可预测的,那么一种选择是使用正则表达式来均质化 ID。例如,如果情况只是删除前三位数字,则可以使用以下内容:
df['short_id'] = df['long_id'].str.extract(r'\d\d\d-([\d-]*)')
如果 ID 转换不是那么可预测(例如,由于转录错误或数据中的一些其他噪声),那么最好的选择是首先使用诸如 recordlinkage
之类的东西来消除 ID 转换的歧义,请参见示例 {{ 3}}。
我通过这样做实际上解决了这个答案: Filtering so all Excel IDs match each other first then compare them
感谢@SultanOrazbayev 的回答。 RE 是我仍在努力学习的东西,但上面的链接要简单得多。我提到的还有两个方面需要理解,但这只是一个开始。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。