gpt4 book ai didi

python - 通过部分字符串匹配合并两个数据帧

转载 作者:行者123 更新时间:2023-11-28 22:24:29 24 4
gpt4 key购买 nike

我正在尝试根据部分字符串匹配合并两个大小不同的相当大的数据帧。

df1$code 包含所有 12 位代码,而 df2$code 包含 10-12 位代码的混合,其中一些较短的代码是 df1$code 中 12 位代码的子字符串匹配。

因此,我需要合并两个数据帧之间的所有 12 位数字匹配项,以及 df2 中那些具有 10-11 位数字代码的记录,这些代码是 df1 的子字符串匹配项。

示例数据框:

df1 <- data.frame(code_1 = c('123456789012', '210987654321', '567890543211', '987656789001', '123456654321', '678905432156', '768927461037', '780125634701', '673940175372', '167438501473'),
name = c('bob','joe','sally','john','lucy','alan', 'fred','stephanie','greg','tom'))

df2 <- data.frame(code_2 = c('123456789012','2109876543','7890543211','98765678900','12345665432','678905432156'),
color = c('blue', 'red', 'green', 'purple', 'orange', 'brown'))

df3 (merged)

code_1 code_2 name color
123456789012 123456789012 bob blue
210987654321 2109876543 joe red
567890543211 7890543211 sally green
987656789001 98765678900 john purple
123456654321 12345665432 lucy orange
678905432156 678905432156 alan brown

最佳答案

试试这个 SQL 连接。

library(sqldf)

sqldf("select a.code_1, b.code_2, a.name, b.color
from df2 b left join df1 a on a.code_1 like '%' || b.code_2 || '%'")

给予:

        code_1       code_2  name  color
1 123456789012 123456789012 bob blue
2 210987654321 2109876543 joe red
3 567890543211 7890543211 sally green
4 987656789001 98765678900 john purple
5 123456654321 12345665432 lucy orange
6 678905432156 678905432156 alan brown

更新:更新了答案以反射(reflect)问题的变化,以便 (1) 子字符串可以位于目标字符串中的任何位置,并且 (2) 代码列的名称已更改为 code_1code_2

关于python - 通过部分字符串匹配合并两个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46368993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com