微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以修改一个数据表以匹配另一个几乎相似的数据框的 ID 吗?

如何解决我可以修改一个数据表以匹配另一个几乎相似的数据框的 ID 吗?

我有多个数据框要比较。我的问题是产品 ID。一个设置如下:

  • 000-000-000-000
  • 对比
  • 000-000-000

(总额)

我看过这里、reddit、YouTube,甚至深入到兔子洞里尝试 .join、.append,其他一些我以前从未见过,甚至还没有理解的方法。有没有办法(或者甚至更好的一些我可以阅读的文档来了解这一点)从主 Excel 工作表中提取产品 ID,将其与应该匹配的产品 ID 进行比较。然后我会更喜欢在所有工作表上制作就地 ID。这样我就可以使用这些 ID 作为索引并将 ID 与行数据并排比较?每个 ID 大约有 113 个要比较的值。那是 113 列,但对于每一行来说,如果有意义

示例:(彩色列是与非彩色列进行比较的主表)

enter image description here

补充说明: 突出显示的黄色 ID 是“唯一的”,我不会更改它们,而是将它们写入列表或其他内容,并在找到时使用 if 语句忽略它们。

编辑: 所以我写了这段代码,这几乎是我需要做的。 它去掉了我应用于所有 ID 的“-”。只需要列出一个唯一的 ID 列表,就可以跳过去掉零了

dfSS["Product ID"] = dfSS["Product ID"].str.replace("-","")

那么这只会列出最多 9 位的数字,唯一的 ID 除外

dfSS["Product ID"] = dfSS["Product ID"]str[:9]

一旦我让它 100% 工作,就会在下面添加完整的代码

我现在正在想办法说类似的话

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 举报,一经查实,本站将立刻删除。